问一个线程向对话框发消息的问题
我用MFC的向导建立一个对话框程序,在对话框的OnInitDialog中开启一个线程AfxBeginThread(CommuProc, 0),这个线程很简单,如下:
UINT CommuProc(LPVOID pParam)
{
::PostMessage(hDlgWnd, CM_TEST1, 0, 0);//hDlgWnd是对话框的窗口句柄
::PostMessage(hDlgWnd, CM_TEST2, 0, 0);
return 0;
}
对话框中添加对CM_TEST1和CM_TEST2的处理OnTest1和OnTest2,我试验了两种情况:
1.OnTest1里做一个很费时的操作,比如10个for (int i = 0; i<10000000;i++);OnTest2就随便打印一句话,结果是:必须等OnTest1算完了,OnTest2的打印才显示出来。
2.OnTest1里打开一个模态对话框A,DoModal后加个打印,OnTest2里还是打印,结果是:OnTest2的打印立刻出来了,关掉模态对话框A后OnTest1的打印才出来。
按理来说DoModal之后OnTest不就停在DoModal里了吗?怎么还能在关闭模态对话框A的情况下把OnTest2的打印输出呢?为什么情况1里就不能输出OnTest2的打印呢?这两种情况有区别吗?