我有以下代码:
Service obj;
obj.start();
obj.stop();
客户代码:
stop()
问题是当主线程调用WM_CLOSE
时,子线程还没有创建窗口,并且没有消息循环来处理WaitOnAddress
消息。我该如何等待创建窗口?
函数2GB
似乎做了我需要的东西,但它是win8和upper,我需要关于winxp级别的东西
答案 0 :(得分:5)
Event objects是线程间/进程间通信的一种形式。在继续之前,它们让一个线程在另一个线程中等待任意事件发生。
基本上你想要这样的东西:
class Service {
HANDLE hThread;
HANDLE hEvent;
HWND hWindow;
};
void Service::start() {
// create event
hEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr);
hThread = CreateThread(...); // creates window and goes on to message loop
// wait for window
WaitForSingleObject(hEvent, INFINITE);
CloseHandle(hEvent);
}
void thread_function(...)
{
// create window, etc
// signal parent to continue
SetEvent(hEvent);
}