Imam jedan prilicno specifican problem, naime, poziv Windows API funkcije PeekMessage izazove da se sve pending poruke poslane sa SendMessage proslede WndProc funkciji.
Imam threadove koji imaju svaki svoj window handle i message loop, tj. komuniciraju medjusobno iskljucivo preko Send/Post message API funkcija. Sve radi fenomenalno, ali problem nastaje kada jedan thread ceka na window poruku drugog threada:
Samo cekanje radi, problem je sto dok thread ceka na poruku WaitedMsg, ako drugi thread posalje nesto sa SendMessage to ce se obraditi odmah (direktno se poziva WndProc), jer izgleda da jedan poziv PeekMessage izazove da se obrade sve poruke poslane sa SendMessage. Kako to da izbegnem? Ima li mozda neki drugi nacin da dodjem do svojih poruka a da ne koristim Peek ili Get Message?
Imam threadove koji imaju svaki svoj window handle i message loop, tj. komuniciraju medjusobno iskljucivo preko Send/Post message API funkcija. Sve radi fenomenalno, ali problem nastaje kada jedan thread ceka na window poruku drugog threada:
Code:
//thread koji ceka
var
Msg: tagMsg;
...
while (not PeekMessage(Msg, FHandle, WaitedMsg, WaitedMsg, PM_REMOVE or PM_NOYIELD)) and (not FThread.Terminated) do
Sleep(1);
//ovde imam poruku koju cekam
...
//thread koji ceka
var
Msg: tagMsg;
...
while (not PeekMessage(Msg, FHandle, WaitedMsg, WaitedMsg, PM_REMOVE or PM_NOYIELD)) and (not FThread.Terminated) do
Sleep(1);
//ovde imam poruku koju cekam
...
Samo cekanje radi, problem je sto dok thread ceka na poruku WaitedMsg, ako drugi thread posalje nesto sa SendMessage to ce se obraditi odmah (direktno se poziva WndProc), jer izgleda da jedan poziv PeekMessage izazove da se obrade sve poruke poslane sa SendMessage. Kako to da izbegnem? Ima li mozda neki drugi nacin da dodjem do svojih poruka a da ne koristim Peek ili Get Message?
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
impersonation.