读书人

工作线程中创办非模态对话框

发布时间: 2013-06-19 10:26:40 作者: rapoo

工作线程中创建非模态对话框


UINT ShowThread(void * pParam)
{
CDlgAnother* p_dlg=new CDlgAnother;
p_dlg->Create(IDD_DIALOG1,NULL);
p_dlg->ShowWindow(SW_SHOW);

MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

void CThreadWindowDlg::OnButton1()
{
AfxBeginThread( ShowThread, NULL);
}


像这样在工作线程中创建非模态对话框是可以响应消息的,但是我现在改变如下:


UINT ShowThread(void * pParam)
{
CDlgAnother* p_dlg=new CDlgAnother;
p_dlg->Create(IDD_DIALOG1,NULL);
p_dlg->ShowWindow(SW_SHOW);

Sleep(10000);

return 0;
}

void CThreadWindowDlg::OnButton1()
{
AfxBeginThread( ShowThread, NULL);
}


改变成这样以后对话框在10秒之内,是不能响应消息的(10秒后消失),我想知道不能响应消息的原因是因为没有了消息循环所以不能响应,还是因为调用了Sleep(10000)造成线程挂起,所以不能响应?
[解决办法]
建议还是把创建模态对话框放到主线程吧
然后工作线程向主线程发消息
[解决办法]
Sleep()让出CPU了,线程处理不了消息
[解决办法]
引用:
Sleep()让出CPU了,线程处理不了消息



+1

读书人网 >VC/MFC

热点推荐