为什么我不能在一个线程中创建一个对话框并在另一个线程中处理它的消息?

时间:2012-08-29 21:21:45

标签: windows multithreading visual-c++

我做了类似的事情:

主题1:

pDlg = new CAxDialogImpl<A>();
// start thread2 here

主题2:

pDlg->Create();

while(GetMessage(&msg, 0, 0, 0) > 0)
{
 ...
}

这样的代码会导致崩溃。有人可以解释原因吗?

1 个答案:

答案 0 :(得分:0)

它取决于创建基础窗口(HWND)的位置。如果CAxDialogImpl构造函数创建了窗口,那么它将存在于线程1上,并且它的消息无法在线程2上处理。如果CAxDialogImpl :: Create()方法创建了HWND,那么它将存在于线程2上,并且消息可能很愉快在那里处理。

实际崩溃发生在哪里?