>Pravio si poseban window handle za svaki thread, da li si koristio CreateWindow?
Ne direktno, koristio sam Delphi-jev budz Classes.AllocateHWnd, koji kreira dummy window tipa UtilWindow pomocu CreateWindowEx. Rezultat je da dobijes pravi window handle i registurej svoj WndProc iz TObject naslednika, znaci ne moras da nasledjujes neefikasan TWinControl samo da bi imao window handle (Tako radi npr. TTimer koji je TComponent a ima window handle za WM_Timer poruku).
>Možeš li da koristiš thread queue umesto (ne treba poseban window, ali se poruke mogu samo postovati)
Ne mogu bas iz tog razloga, sto onda ne radi SendMessage. Kada mi svi threadovi imaju window handle onda mogu da radim i Send i PostMessage, Post kada hocu asinhrono (non-blocking) da pozivam metode drugih threadova i Send kada hocu sinhrono (blocking) da bih odmah dobio rezultat kada je to potrebno. Uposte ne moram da razimsljam o implementaciji metoda koji pozivam. Ceo sistem radi perfektno, jedino se kasnije pokazalo da mi je potrebno jos i cekanje na odredjenu poruku koja ce uvek stici sa PostMessage, znaci u message queue. Problem je u tome da dok se ceka na poruku preko onog koda thread nije blokira, ako neki thread posalje nesto sa SendMsg to se obradi odmah sto potencijalno dovede do jos jednog cekanja. Kada prvi odgovor konacno stigne, stigne u onu granu koja je poslednja cekala a ne prva.
>Možeš pokušati da staviš PM_QS_POSTMESSAGE or PM_REMOVE kao flag, ako to ne pomogne moraćeš da revidiraš sistem slanja.
PM_QS_POSTMESSAGE ne pomaze, probao sam. Isto tako ni critical sectioni ne pomazu (logicno, ne mozes da zakljucas samog sebe), a neki Boolean flegovi tipa FWaiting naravno izazovu deadlock threada koji ceka. Izgleda da cu stavrno moarati da revidiram sistem slanja, probacu sa TEventom.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.