请教大家一个问题。如果一个线程执行到了MessageBox函数,这个线程现在是什么状态?这个状态与执行Sleep();之后线程的状态完全不同。举个例子,在线程A中创建并显示一个窗口,然后马上执行函数MessageBox,此事,显示出来的这个窗口上的按钮是可以点击的,也就是说,这个窗口是可操作的。但是如果,在线程A中穿件并显示一个窗口,然后马上执行函数Sleep,此事,显示出来的这个窗口处于“未响应”状态,也就是怎么点都没反应的那种。请问执行到MessageBox函数之后,线程的状态是什么,还有什么类似的函数能有这个功能,让线程进入这个状态。
==========
这两个在本质上是不同的。
Sleep()是线程挂起,也就是说此时线程的状态是休眠的,并不会被调度到。
MessageBox其实是一个模态对话框,它的工作原理是因为模态对话框内部有一个消息循环,所以消息被MessageBox弹出的对话框截获了,造成了主界面不可操作,它所在的线程是活动的。
=========
不对,这里没有阻塞一说,只是模态对话框内部的消息循环截取了消息,造成主界面收不到消息。你可以做一个试验:你在一个定时器中弹出MessageBox,你会发现,即使你不关闭弹出的对话框,MessageBox也会不停地弹出来。
MessageBox(NULL,TEXT("abc"),NULL,NULL);
MessageBox(NULL,TEXT("222"),NULL,NULL);
肯定是第一个对话框消失之后才会显示第2个对话框,貌似是线程被暂停了,但是却完全不影响消息的接收,可程序只有一个线程
{
....
}