GetMessage w WinAPI
Ostatnio zmodyfikowano 2017-03-30 19:50
natofp Temat założony przez niniejszego użytkownika |
GetMessage w WinAPI » 2017-03-30 19:03:54 Witam,
niedawno zacząłem uczyć się WinAPI w C++. Zauważyłem, że domyślnie ( oraz w poradnikach ) na końcu każdego programu okienkowego znajduje się fragment kodu podobny do tego :
while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); }
Jest on zamknięty w pętli while, więc mam pytanie - czy jeśli umieścimy dowolną nieskończoną pętlę przed tym kawałkiem kodu, to powyższy fragment nigdy się nie wykona(?). To nie miałoby sensu, a przecież tak wydaje się na logikę. Czy powyższy fragment jest umieszczany przez kompilator w innym wątku działając nie zależnie od programu? Będę bardzo wdzięczny za wyjaśnienie moich wątpliwości |
|
jankowalski25 |
» 2017-03-30 19:26:17 Kod wstawiaj w znaczniki [cpp]/*tutaj kod*/[/cpp]. czy jeśli umieścimy dowolną nieskończoną pętlę przed tym kawałkiem kodu, to powyższy fragment nigdy się nie wykona(?). |
Jeśli wstawisz przed niemal czymkolwiek coś w stylu while( true ); , to w taki sposób zawiesisz program i dalsze instrukcje się nie wykonają. Czy powyższy fragment jest umieszczany przez kompilator w innym wątku działając nie zależnie od programu? |
Skąd taki wniosek? Kompilator może robić różne dziwne optymalizacje, ale jeśli sam nie podzielisz kodu na wątki, to samoistnie taki podział zazwyczaj nie powstaje. |
|
natofp Temat założony przez niniejszego użytkownika |
» 2017-03-30 19:36:35 Czyli wtedy okno nie będzie reagowała na żadne polecenia, tak? |
|
marcolo2307 |
» 2017-03-30 19:50:00 Nie będzie. Pusta pętla while nic nie zrobi, to właśnie ta pętla z GetMessage obsługuje wszystkie kliknięcia itd. Btw. Nie próbuj pisać nic skomplikowanego w WinAPI, po ogarnięciu podstaw lepiej przejdź na Qt. |
|
« 1 » |