如果程序有多个窗口,在其它的窗口没有关闭的情况下关闭主窗口后,我想让程序结束。
我的做法是在主窗口函数响应WM_DESTROY消息时调用ExitThread(0)和TerminateThread(GetCurrentThread(),0)程序无法退出,要使用TerminateProcess或者ExitProcess才可以我的问题是
1、MessageBox函数是如何解决在消息框没有关闭的情况下而关闭了主窗口后,使整个程序都结束的?
2、ExitThread、TerminateThread为什么不可以结束一个单线程的程序呢?

解决方案 »

  1.   

    GetCurrentThread返回的是伪句柄,你调用一下DuplicateHandle试试
      

  2.   

    周末大家都出去Happy吗,怎么人不多呀?
      

  3.   

    有3个窗口,在主窗口处理函数响应WM_DESTROY消息时
    PostQuitMessage(0)
    PostQuitMessage(0)
    PostQuitMessage(0)
    这种方法也不可以,不知道为什么?MessageBox函数是如何解决在消息框没有关闭的情况下而关闭了主窗口后,使整个程序都结束的?没有人知道吗?
      

  4.   

    单线程程序如果结束线程整个程序就结束了。估计是你的主窗口根本没有收到WM_DESTROY消息,你在主窗口响应WM_CLOSE消息调用DestroyWindow试试。
      

  5.   

    PostQuitMessage(0)为什么不可以?奇怪
      

  6.   

    PostQuitMessage是结束主消息循环,而对话框有自己的消息循环
      

  7.   

    case WM_DESTROY:
    PostQuitMessage(0); 
    PostQuitMessage(0); 
    PostQuitMessage(0);第一个执行后,整个窗口过程立即结束了,所以后面的两个都没有机会执行了
      

  8.   

    ExitThread和TerminateThread后程序没有退出的原因是:我的程序不是单线程的,运行后自动
    多出二个窗口msctfime ui、ime和一个线程.我之前发贴问过,有人说是输入法,不太明白.我把不影响不大的进程全部杀死后,ExitThread、TerminateThread就没有问题了, 程序正常退出了
      

  9.   

    MessageBox函数是如何解决在消息框没有关闭的情况下关闭了主窗口后,使整个程序都结束的?没人知道吗?
      

  10.   

    没有研究过MessageBox,不过看起来应该与MessageBox没有关系。通常程序在主窗口销毁时,会执行PostQuitMessage,这样程序就从MessageBox中返回了。MFC的消息循环中会检查主窗口,如果主窗口被销毁,则会退出程序。
      

  11.   

    ExitTHread();
    If the thread is the main thread in the process when this function is called, the thread's process is also terminated. If the primary thread calls the ExitThread function, the application exits.TerminateThread()
    It also terminates the thread process only if the thread in question is the main or primary thread.msdn说这两个都可以结束单线程app的。。线程消息队列是不是阻塞了哦?