witam, pisze w .net (c++) przegladarke moich plikow graficznych (taki format 3d) i mam problem ze stanem idle aplikacji, tzn moj program musi dzialac takze podczas bezczynnosci programu, wiadomo, potrafie zrobic idle event handler, ale on wywolywany jest tylko raz podczas wchodzenia aplikacji w stan bezczynnosci, jak zrobic zeby ta funkcja byla wywolywana ciagle? albo czy jest jakas mozliwosc zobaczenia czy aplikacji ze stanu idle wychodzi (wtedy bym zrobil petle w funkcji obslugujacej idle event i wychodzil z niej jakbym widzial ze zaplikacji z idle wychodzi). ktos sie spotkal z takim problemem?
Może wystarczyłoby użyć kontrolki Timer z łaściwością Interval ustawioną na 1 milisekundę ;P
otello napisał(a)
Może wystarczyłoby użyć kontrolki Timer z łaściwością Interval ustawioną na 1 milisekundę ;P
Opanuj się 8-|
Sprawdź czy przypadkiem GetQueueStatus ci się nie przyda.
PS. Pomysł z pętlą nie jest chyba dobry. ;)
PS. Pomysł z pętlą nie jest chyba dobry. ;)
Tu mój błąd:P - chciałem poprawić ale się nie dało
Tu masz przykładową pętle:
while(1)
{
DWORD tmp00=GetQueueStatus(QS_ALLEVENTS);
if(LOWORD(tmp00)!=0)break;
/**** tu wciskasz jakiś kod ****/
}
W zwykłym C++ przebudowałby główną pętlę komunikatów w programie i jeśli nie ma message'ów do obsłużenia to np.: renderujesz klatkę, czy robisz coś tam innego. Tak zwykle piszę aplikacje w DirectX i jak dotąd nie znalazłem wad tego rozwiązania :) Nie wiem, czy to zadziałałoby pod .NET, ale warto poszukać.
W przykładach do Managed DirectX (.NET) Microsoft robi jeszcze inaczej: po zrenderowaniu klatki od razu stan okna wstawia jako Invalidate, więc zmusza okno do odrysowania, jak tylko będzie miało czas na obsłużenie tego komunikatu..
Szczawik napisał(a)
W zwykłym C++ przebudowałby główną pętlę komunikatów w programie i jeśli nie ma message'ów do obsłużenia
W zasadzie to przykład z GetQueueStatus robi to samo tyle, że w pętli zagnieżdżonej w głównej pętli programu. ;)