黄海全ID:optman
41932次访问,排名2600好友1人,关注者1
比思想更有力的是行动
optman的文章
原创 106 篇
翻译 5 篇
转载 6 篇
评论 16 篇
最近评论
yumn2004:这篇文章对我有很大的帮助,谢谢楼主!
hdnero:wow power leveling
zhanghs202:你那个只是讨论一个主题或者两个人谈论一个话题而已
zhanghs202:你说的那个叫需求吗?肯定不叫,如果你不知道你要开发的东西是什么,你怎么下笔啊?
zhanghs202:听说丰田汽车早上9点上班,8:50的时候,安装车间一个零件都看不到,一个人也没有。晚上6点下班,6:10分的时候,车间里同样是看不到一个零部件。如此完美的景象,和公司的机制有莫大的关系。制度化,反腐倡廉的最佳利器是法律,制度化,以及保障机制。然后带来政府的工作的效率。软件研发的制度化,是保障沟通效率,正确高效工作的保证。
文章分类
    收藏
      相册
      Blog
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 如何等待进程树结束收藏

      新一篇: 诡异的TLB文件 | 旧一篇: Amdahl's law

      我们通常使用的WaitForSingleObject只能等待一个进程结束,如果进程中间又发起了另外一个进程,我们如何知道那个进程结束?

      其实,Windows平台上有Job Objects,可以对进程进行分组管理。只要把一个进程指定给一个Job,其子进程也会自动归属该Job,除非主动脱离。这样,我们就可以通过Job来跟踪整个的进程树了。

      示例代码:
      #include "stdafx.h"
      #include 
      <iostream>
      #include 
      <Windows.h>

      int _tmain(int argc, _TCHAR* argv[])
      {

       HANDLE job
      =CreateJobObject(NULL,NULL);

       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       
       ZeroMemory( 
      &si, sizeof(STARTUPINFO) );
       si.cb 
      = sizeof(STARTUPINFO);
       ZeroMemory( 
      &pi, sizeof(PROCESS_INFORMATION) );

       CreateProcess(L
      "C:\WINDOWS\system32\cmd.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
       
       AssignProcessToJobObject(job,pi.hProcess);
       
       
      while(true)
       
      {
        JOBOBJECT_BASIC_PROCESS_ID_LIST list;
        DWORD length;
        QueryInformationJobObject(job,JobObjectBasicProcessIdList,
      &list,sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST),&length);
       
        
      if(list.NumberOfProcessIdsInList<=0)
             
      break;
       
        Sleep(
      1000);
       }
        
           CloseHandle(job);
       
       std::cout
      <<"exit"<<std::endl;
       
       std::cin.
      get();
       
       
      return 0;
      }


      你可以在CMD窗口里启动任何的程序,比如notepad.exe,然后在open对话框里使用右键菜单打开其它文件,程序.....如此循环,上面的代码会等待所有程序退出才会结束。


      发表于 @ 2008年04月02日 11:41:00|评论(loading...)|编辑

      新一篇: 诡异的TLB文件 | 旧一篇: Amdahl's law

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © optman