比如我的应用程序,叫aaaa.exe
我关掉了aaaa.exe的主窗口,但是进程里该aaaa.exe仍然在运行
我想实现关掉窗口的时候将这个应用程序的进程也关掉
请问该如何处理?我在OnDestroy()函数里用了exit(0),  没效果。

解决方案 »

  1.   

    一个应用程序不是一个主窗口嘛?
    就是MFC那个dlg里的对话框,我用的是MFC单文档对话框模式
      

  2.   

    从你的描述中可以看出,你的对话框一定是非模态的吧,非模态的对话框关闭要重载确定或者关闭这个按钮的处理函数,在函数里面不能调用EndDialog函数,而要调用函数DestroyWindow函数!
      

  3.   

    case WM_DESTROY:
      PostQuitMessage(0);
      break;
      

  4.   

    应该是你的代码出了问题吧,比如SDK程序中消息循环写成了GetMessage(&msg,hWnd,NULL,NULL)的话会出现这个问题。
      

  5.   

    要是真的写成这样的话,除了将hWnd改成NULL以外,还可以这样写
    BOOL bRet;

    while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)

    if (bRet == -1)
    {
    // handle the error and possibly exit
    break;
    }
    else
    {
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
    }
      

  6.   

    是的,没有释放掉资源。
    因为我在程序里还调用了一个其它开源框架的函数(处理画面的)
    我的主窗体关闭了以后,那个处理画面的还在跑我现在只能在任务管理器里关掉aaaa.exe的进程才能结束整个程序
      

  7.   

    肯定是你代码有问题
    一些该释放的东西没有释放干净
    一般调用com组件如果不及时释放的话就会出现这种问题
      

  8.   

    如果直接在onDestroy函数中杀掉该进程
    该怎么做??
      

  9.   

    楼主在调试状态吧,因为本身如果关闭一个.exe程序以后,必定会走到窗体和程序自动析构的那步.现在造成这种情况,肯定是代码有问题.运行出错所导致的.
      

  10.   

    WM_DESTROY 消息处理中调用 PostQuitMessage(0);
      

  11.   

    你调试一下
    进OnDestroy()了么
      

  12.   

    没进OnDestroy不过我在OnClose里写了 PostQuitMessage(0);OnClose里执行到了的
      

  13.   

    你的程序都做什么了
    有没有调用什么资源
    开什么进程
    使用什么com组件
    你这么强行结束进程也不分析原因太暴力了
      

  14.   

    以上的都不行。郁闷
    我的程序调用了一个开源框架的图像处理函数
    我的主程序窗体关掉的时候,那个图像处理函数还在运行(因为图像处理函数是while(1)这种无限循环模式)只有当我在windows任务管理器里关掉aaaa.exe这个进程,程序才退出。
    以上我说的都是在程序部署以后运行的情况下,不是在开发环境里F5运行状态下。
      

  15.   

    你多加一条:
    exit(EXIT_SUCCESS);
      

  16.   


    死循环了,还怎么退出,不要写While(1)
    改成While(bRunning)
    退出之前bRunning = FALSE