Przerwać proces żeby opróżnić kolejkę komunikatów

0

Witam. Mam taki problem: w moim programie jest pętla która bardzo długo się wykonuje. Przez czas jej trwania nie jest obsługiwana kolejka komunikatów(nie da się nawet przesunąć okna). Wiem że jest taka funkcja która zatrzymuje na chwile program, obsługuje komunikaty i wraca z powrotem od wykonywania programu. Programuje w WinApi. Wiem że w borlandzie jest taka metoda Aplication.ProcessMessage(), która to robi. Ale ja potrzebuje tego samego tylko że pod WinApi.

Dzięki.

0

Masz tu odpowiednik (chyba działa ;P):

void ProcessMessage()
{
    MSG msg;

    if(PeekMessage(&msg,0,0,0,PM_REMOVE))
    {
        if(msg.message==WM_QUIT)return;

        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
0

A nie byloby lepiej umiescic tej petli w oddzielnym watku?

0
othello napisał(a)

A nie byloby lepiej umiescic tej petli w oddzielnym watku?

Nie zawsze warto.

0

Jednak nie ma jak forum. Ten kod co napisałeś był prawie dobry:)
To jest poprawiony przeze mnie:
void ProcessMessage(){
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE)){
if(msg.message==WM_DESTROY)PostQuitMessage(WM_CLOSE);
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
zmieniłem tyko warunek if na while żeby obsłlużył wszystkie komunikaty w kolejce, bo inaczej nie odrywowywał mi buttonów itp.

Dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1