2010-11-22 49 views
2

我正在用winapi進行編程。我如何等待消息達到規定的時間? 如果沒有消息,我可以做另一項任務。我無法使用睡眠,因爲窗口回調過程將會延遲。等待一段時間的窗口消息

while (true){ 
    ...//wait a message for 30 miliseconds 
    GetMessage(&message, hwnd, 0, 0)) or PeekMessage(&message, hwnd, 0, 0, PM_REMOVE) 
    ... 
    if (no_message){ 
     call_a_function(); 
    } else { 
     if (finish) 
      break; 
     TranslateMessage(&message); 
     DispatchMessage(&message); 
     ...//set to wait 30 minus elapsed time 
    } 
} 

回答

0

這似乎是一個奇怪的要求。 Windows程序應該是響應式的。如果call_a_function需要很長時間,那麼你的應用程序將會得到「這個窗口沒有響應」的處理。

此外,如果隊列中沒有發佈消息,則GetMessage將進入等待狀態。我不明白爲什麼你的消息循環看起來與canonical message loop差別很大。

我認爲要很好地回答這個問題,知道你的call_a_function例程的目的會有幫助。