网上看了好多讨论,各种各样,我通过CreateProcess函数创建的命令行进程是封装好的,看不见代码,想问问如何在父进程正常退出后以及其子进程在执行完自己的事情后获取到父进程已经结束也跟着正常退出。
说明:
   1.能否通过CreateProcess函数的某个参数去设定,使得实现这个预期结果?
   2.一些强制退出子进程会造成恶果的方式不需说明。
恳求大侠们来帮我解决下。
偶百思不得其解,望您解答疑惑。

解决方案 »

  1.   

    CreateProcess没有相关的参数。
    我觉得这个就是一个进程通信的问题,父进程在结束之后发消息给子进程,通知子进程退出。
      

  2.   

    PostThreadMessage(threadID, WM_QUIT, 0, 0);
      

  3.   


    应该不可以吧,子进程在收到消息之后应该会立即执行消息处理函数,参考《windows核心编程》派444页上的做法可以设置一个共享段,说到底也是进程通信的一个方法之一。
      

  4.   


    试了一下  不管用…… 可能我用的threadID 不对  这个参数怎么获取? 是那个pThread??
      

  5.   

    threadID是你在创建一个线程时候就设定的了,你看看你的CreateThread()是不是把它设为NULL了,是的话就改一下。
      

  6.   

    CreateProcess 最后的参数LPPROCESS_INFORMATION 中包含了返回的线程ID typedef struct _PROCESS_INFORMATION 
    {  
      HANDLE hProcess;  
      HANDLE hThread;
      DWORD dwProcessId;
      DWORD dwThreadId;
    } PROCESS_INFORMATION, 
      

  7.   

    PostThreadMessage 对于命令行程序没用吧?
      

  8.   


    引用这个dwThreadId也不行,PostThreadMessage不管用,主进程调用这个函数给子进程发送关闭消息,子进程执行完后也不关闭。应该是要在命令行中加一个消息循环把?代码全部封装,我看不到,怎么加这个消息循环?谁会帮帮忙 谢谢了
      

  9.   


    这个加入消息循环是不是要获得打开的命令行可执行文件的源代码? 我通过CreateProcess打开的这个子程序是封装好的可执行文件,没有源代码的,怎么加入你说的这个消息循环?指点一下,谢谢
      

  10.   

    子进程执行完自己的事情之后应该会正常退出
    你是想要子进程在自己的事情还没执行完时发现父进程已经结束的情况下结束自己吧。我刚用createprocess调用mplayer来播放多媒体。程序要退出的时候就给mplayer进程发送quit命令。命令是通过命令管道发送的。类似的,你这种情况应该也可以通过相似的方式来解决。前提是子进程能够接受管道命令(可以在createprocess的参数中设置输入输出,但你的子进程必须正确的处理输入的命令)。
      

  11.   


    我的子进程在完成自己的事情后也不退出,所以我想他执行完自己的事情退出。
    当然也有你后面说的想法,就是在他执行的时候父进程给他发送退出命令,他去响应。你说的在createprocess中 有参数去设置? 那你告诉我下怎么设置呗? 等了好几天了 还没解决