上海酒店无线覆盖:关于Messagebox不能中断消息循环

来源:百度文库 编辑:中财网 时间:2024/05/08 23:56:21

工作中突然发现messagebox尽然不能中断timer的消息循环,导致我很诧异,思考消息循环,难道消息循环还是多线程的(绝对不可能),那如果不是的话,为什么能跳过messagebox执行下一个timer事件呢,难道有什么特殊处理,于是又去翻看书本资料查找是否有什么特殊的处理方式,结果只查到timer事件的优先级非常低,相当的谦让。一无所获!然后上网查询资料,看看timer是否有什么特殊,还是没有结果,最后在程序里面调试,发现一个奇怪的现象,代码如下:

while (GetMessage(&msg, NULL, 0, 0))

{
        DispatchMessage(&msg); -------------------------->事件处理Process{MessageBox(hWnd,”1”,0,0)}

        Messagebox(hWnd,”2”,0,0);
  }

 

 

然后开始run,发现一个神奇的现象,依次条Mssagebox,每次都cancel掉,按顺序1 2挑出来,如果不点1的话2就不挑,但是1后续还是不断挑,如果cancel掉后续的2,1照样也不挑出来,但是如果cancel掉第一个卡住的messagebox,那样的话就能跳出2。突然来了点灵感,看来messagebox还是卡住了消息循环所以1不cancel2旧不出来,而后续还会跳出messagebox1是因为我们忽视messagebox也有自己的消息循环也能接收到timer消息,把上面的code解析出来就是

while (GetMessage(&msg, NULL, 0, 0))

{

        ………
       

while (GetMessage(&msg, NULL, 0, 0))

{
        DispatchMessage(&msg);
  }

………

  }

红色的就是处理消息流程中的mssagebox,所以当Bossagebox block的时候还是会有timer消息能够接受到。