如何得知进程结束

扬帆886 2009-06-08 10:38:39
我刚接触多线程编程不久,有个问题请教下:
在一个timer里用EnumProcesses 得到所有进程pid,根据pid OpenProcess得到进程HANDLE,保存到一个HANDLE数组里面,起一个子线程用来监视HANDLE数组里的所有进程,当有进程结束时我想得到通知。我的做法如下:

在 while循环中用WaitForMultipleObjects等待该HANDLE数组,当等待成功某进程后CloseHandle该句柄。但再次wait时会失败,因为CloseHandle已将结束进程HANDLE置空,参数不匹配.当等待成功某进程后不调用CloseHandle关闭该句柄则下次wait函数返回的还是上次等待成功的HANDLE。所以貌似行不通,我也不想用GetExitCodeProcess定时轮寻进程状态的方法,因为有多个进程。哪位指点下还有其它什么方法可以实现不?系统在进程结束时会有什么消息通知么?
...全文
56 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
扬帆886 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qizhao2001 的回复:]
你有时间研究win32 api,却没把C++基础学好,把 WaitForMultipleObjects 成功的 handle 从列表中移除。
用个std::vector 就好了,
[/Quote]
一语中的,3Q。汗颜下
qizhao2001 2009-06-08
  • 打赏
  • 举报
回复
你有时间研究win32 api,却没把C++基础学好,把 WaitForMultipleObjects 成功的 handle 从列表中移除。
用个std::vector 就好了,
扬帆886 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
atexit函数
[/Quote]
我看看这个函数。如果进程结束时系统有消息通知,可不可以用SetWindowsHookEx勾住改消息,加入自己的代码以实现该功能?

WaitForMultipleObjects成功后将该HANDLE从数组中移除,将该HANDLE后的其他HANDLE向前移,修改ncount参数,再次等待?
我也想过,太麻烦了 没办法就用这方法了。。
谢谢楼上2位。
jjcang 2009-06-08
  • 打赏
  • 举报
回复
closehandle后把它从数组中去掉不行吗?
就是说WaitForMultipleObjects不要等待已经结束的进程
  • 打赏
  • 举报
回复
atexit函数
crst_zh 2009-06-08
  • 打赏
  • 举报
回复
进程结束,会变成有信号状态,

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧