【发布时间】:2012-04-13 22:16:04
【问题描述】:
我对线程安全回调有疑问。
void draw_something() { /* draws something */ }
问题是,如何在主应用程序线程中调用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;
}
因此,window 的 MessageQueue 处理安全线程调用,但我认为这不是一种非常高效和优雅的方式。我知道有更好的方法(也许是提升?)但我不知道。
【问题讨论】:
标签: c++ multithreading winapi timer