我有線程安全回調的問題。C++定時器,線程,定期調用
void draw_something() { /* draws something */ }
,問題是,如何調用draw_something
在主應用程序線程每隔指定的時間,不論其他代碼(所以它會像C#定時器並在主線程火功能)?早些時候,我使用CreateWindow的創建(在主線程),它處理從SendMessage函數的消息(這是從另一個計時器線程發送)輔助窗口:
void MainThreadFunction(){
CreateThread(0, NULL, GoProc, NULL, NULL, NULL);
}
DWORD WINAPI GoProc(LPVOID lpParam){
while(1){
SendMessage(auxiliary_window_hWnd, ADDINATIONAL_MESSAGE, 0, 0);
Sleep(30);
}
return 0;
}
所以窗口的MessageQueue交易safethread電話,但我不認爲如果它是非常有效和優雅的方式來做到這一點。我知道有更好的方法(也許提升?),但我不知道。
+1這也將防止OP代碼所具有的時鐘偏移。它將總是有超過30ms的間隔。 – usr 2012-04-13 22:31:03
計時器也可能受到歪斜。這個用例看起來不太可能是個問題。 – 2012-04-13 22:37:26