有一个程序,需要反复的执行一系列命令如dir C:\
这些命令分别在单独的进程中同时执行,
执行结束后自动退出,进程关闭
如果超过一定的时间没有结束,程序需要将其强制关闭
建立新进程用的是CreateProcess
强制关闭进程用的是TerminateProcess
现在的程序在反复运行很多个命令(30000左右)后,会出现堆溢出的错误,
一直没找到合适的解决办法
我的进程中new 的变量都已经delete掉了,查了一下资料,TerminateProcess只是强制关闭进程
并不释放资源
请问各位,如果强制关闭进程并释放资源
或者提供其他的解决办法,谢谢。

解决方案 »

  1.   

    用这个试试:
    PostMessage(hWnd,WM_CLOSE,0,0);
      

  2.   

    PostMessage 要有一个窗口
    句柄的吧
    可我的进程都是后台运行的,根本没有窗口啊。。
      

  3.   

    CreateProcess之后你会得到进程及其主线程的句柄,如果你想等待进程结束,可以用
     WaitForSingleObject(hProcess, INFINITE);
    如果想使用超时机制,可以
     WaitForSingleObject(hProcess, 3000); // 仅仅等待3秒,可以自己改
    如果发现超时才使用TerminateProcess,超时时间应该设置成足够长,尽量避免强制结束进程
      

  4.   

    To jameshooo现在的程序是这么写的,问题在于TerminateProcess在关闭进程后不能
    释放资源,在执行少量的任务时,没什么差别,但在反复执行创建进程操作时
    就会出问题,因为有一些进程被强制关闭而资源没有释放,导致堆溢出
    我想要的是一种可以强制关闭进程但同时可以安全释放资源的方法
      

  5.   

    CreateRemoteThread,线程函数用ExitProcess
      

  6.   

    如果启动的进程都是控制台进程,向主线程发送ctrl-break按键消息(这种方式我没有试验过);创建控制台进程前设置好创建参数,以便重定向控制台进程的管道,向管道中发送ctrl-break命令
      

  7.   

    To evileagle:
    ExitProcess好像也不会释放资源To jameshooo:
    我试试你的方法吧,谢谢~~
      

  8.   

    ExitProcess  不可以吗?
    只要避开terminate强制关闭就行了吧
      

  9.   

    ExitProcess 只能退出本身吧
    而我要的是杀掉别的进程