首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-06-19 
工作线程中创建非模态对话框UINT ShowThread(void * pParam) {CDlgAnother* p_dlgnew CDlgAnotherp_dlg-

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


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

热点排行