处于死循环的窗口不是当前工作窗口,想用快界键使其停止工作,如何做?

解决方案 »

  1.   

    你问的是差不多的问题。
    快捷键是键盘消息,你可以在WM_KEYDOWN消息里处理,设置退出:BOOL m_bExit=TRUE;在你的循环体中检查UI消息,如果有消息就处理掉,这样就能够退出。
    m_bExit = FALSE;
    while(...) {
    ...
    MSG message;
    if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE) ){
    ::TranslateMessage(&message);
    ::DispatchMessage(&message);
    }if( m_bExit )
    break;  //退出循环
    }
      

  2.   

    当然无法退出,不进消息循环无法响应操作,如果是你的写的程序,那检查一下死循环的地方(在确定按钮的响应函数中加断点跟踪),修改程序。
    别人的程序用TerminateProcess直接关了进程
      

  3.   

    用TerminateProcess()强行结束进程有可能泄漏资源,不建议使用。如果是别人的程序,那么就只好...不是当前窗口的话,但是这两个窗口是同一个线程的吗?
    如果不是同一个线程,那么就不需要pump message。你说的问题也不会出现。方法:
    你可以把你的点击OK后应该干的工作(就是循环之类的...),放入一个worker thread中去做,这样你的另一个窗口就可以收到UI消息。
    还是需要在工作线程的循环里判断条件,在你的控制窗口里设置条件。