如何等待在其他线程中创建窗口

时间:2015-11-16 04:26:40

标签: c++ oop winapi

我有以下代码:

Service obj;
obj.start();
obj.stop();

客户代码:

stop()

问题是当主线程调用WM_CLOSE时,子线程还没有创建窗口,并且没有消息循环来处理WaitOnAddress消息。我该如何等待创建窗口? 函数2GB似乎做了我需要的东西,但它是win8和upper,我需要关于winxp级别的东西

1 个答案:

答案 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);
}