Zdravím
Potřebuji poradit, a také jestli někdo může potvrdit že následující je normální nebo mám něco někde špatně. Jde o to že při změně určitých parametrů formu (např. Position, BorderStyle, FormStyle, ...) za chodu, se také změní jeho handle.
Potřebuji to protože mi na pozadí běží pár vláken které na handle daného okna posílají zprávy (pomocí PostMessage), tento handle zadám jako property daných vláken před jejich spuštěním, takže pokud se za běhu změní tyto parametry (a jakože se změní), tak vlákna dál posílají zprávy na špatný handle => nefunkční program (nemůžu si dovolit aby se "ztratila" byť jediná zpráva).
A nějak nevím jak toto vyřešit. Přemýšlel jsem o následujícím:
Změnit property daného vlákna když měním form, ale nemám jistotu že mezi tím než získám nový handle a předám ho vláknu toto vlákno nepošle zprávu blbě. A navíc nejsem takový znalec, takže nevím jestli je změna property vlákna za běhu thread-safe, pokud je definovaná jen takto:
property SendToWnd: Cardinal read thrSendToWnd write thrSendToWnd;
Případně zároveň s tím můžu udělat cyklus který bude zprávu posílat tak dlouho dokud nedorazí, nebo to změním na SendMessage a budu kontrolovat návratovou hodnotu. Ale tím ty vlákna můžu zbrzdit, což se mi moc nechce.
Nebo taky můžu vláknům předhodit jako property přímo ten form, něco ve stylu:
property SendToWnd: TForm read thrSendToWnd write thrSendToWnd;
Ale tady zase nevím jestli číst handle okna je bez synchronizace bezpečné (asi ne když se mění, což...)?
Napadají mě i další řešení a jejich kombinace, ale ani u jednoho nevím jestli je thread-safe.
Snad jsem se vyjádřil srozumitelně.
Předem děkuji za radu nebo postrčení správným směrem a za potvrzení/vyvrácení zmíněného chování.