void CDialogBasedDlg::OnButton1()
{//主线程
// TODO: Add your control notification handler code here
AfxBeginThread(TestThread,NULL);
Sleep(5000);
}
UINT TestThread(LPVOID pParam)
{//辅助线程
g_dlg.DoModal();
// MessageBox(NULL,"ok","HELLO",MB_OK);
return 0;
}
代码如上,辅助线程中的对话框要5秒后才出现,而且SLEEP多少时间,他就多少时间后出现,
但是如果在辅助线程中,不显示对话框,而弹出MESSAGEBOX(),那么就马上运行。
这是为什么?
{//主线程
// TODO: Add your control notification handler code here
AfxBeginThread(TestThread,NULL);
Sleep(5000);
}
UINT TestThread(LPVOID pParam)
{//辅助线程
g_dlg.DoModal();
// MessageBox(NULL,"ok","HELLO",MB_OK);
return 0;
}
代码如上,辅助线程中的对话框要5秒后才出现,而且SLEEP多少时间,他就多少时间后出现,
但是如果在辅助线程中,不显示对话框,而弹出MESSAGEBOX(),那么就马上运行。
这是为什么?
MessageBox只是一个API函数.
UINT TestThread(LPVOID pParam)
{//辅助线程
// g_dlg.DoModal();
// CDialogBasedDlg dlg;
// dlg.DoModal();
CDialogBasedDlg *dlg = (CDialogBasedDlg *) pParam;
MessageBox(dlg->m_hWnd,"ok","HELLO",MB_OK);
return 0;
}void CDialogDlg::OnButton2()
{
AfxBeginThread(TestThread,this);
Sleep(5000);
}
另外,MESSAGEBOX()是马上就弹出来的,这个例子很简单,大家可以试试。
{
CDialogBasedDlg dlg;
dlg.DoModal();
return 0;
}
试试看。对于非UI线程你的代码好象有问题
要等主线程执行完,他才执行。这是为什么?