C++ Timer,Thread,定期调用

use*_*008 0 c++ winapi multithreading timer

我遇到线程安全回调问题.

void draw_something() { /* draws something */ }
Run Code Online (Sandbox Code Playgroud)

问题是,如何draw_something在主应用程序线程中调用每个指定的时间量而不考虑其他代码(因此它将像主线程中的C#Timer和fire函数一样)?之前我使用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;
}
Run Code Online (Sandbox Code Playgroud)

所以window的MessageQueue会处理safethread调用,但我不认为它是否是非常有效和优雅的方法.我知道有更好的方法(也许是提升?)但我不知道.

Mar*_*som 5

您可以使用Windows SetTimer调用来获取定期WM_TIMER消息并完全跳过第二个线程.