请问:怎么判断一个进程已经执行完毕?

ATmega32 2008-06-24 02:58:52
CreateProcess(NULL,sCommandLine.c_str(),&sa,&sa,TRUE,CREATE_NO_WINDOW,NULL,NULL, &si, &pi);
请问:怎么判断这个进程已经执行完毕?

...全文
321 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whomin 2008-06-25
  • 打赏
  • 举报
回复
线程构造函数传参数的方法:
class TThreadA : public TThread
{
public:
__fastcall TThreadA(bool CreateSuspended,此处放从主线程传过来的参数):TThread(true)
{
//此处可以将主线程传入的参数用变量存储
};
}
主线程在创建该线程时传入参数即可

关于消息处理:
1.主线程类需要做的事情:
自定义一类新消息,代表所关注进程结束:
#define WM_MYMESSAGE (WM_USER+100)
在主线程声明中建立消息映射表,把某条消息的处理权交给自定义的消息处理函数。
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_MYMESSAGE,TMessage,消息处理函数名)
END_MESSAGE_MAP(TForm)
在主线程类中声明消息处理函数:
void __fastcall 消息处理函数名(TMessage &Message);
并在cpp中具体写出消息处理函数,在这里实现你需要的功能。比如:
void __fastcall TMainForm:: 消息处理函数名(TMessage &Message)
{
... // 此时已得知关注进程结束,在此加入你自己的处理代码
TForm::Dispatch(&Message); //如果不是自定义消息,则最好继续往后传递
}
2.子线程如何传递消息:
PostMessage(主线程句柄,WM_MYMESSAGE,0,0);

僵哥 2008-06-24
  • 打赏
  • 举报
回复
IsRunCompleted = WaitForSingleObject(Thread->Handle,0)!=WAIT_TIMEOUT;
ATmega32 2008-06-24
  • 打赏
  • 举报
回复
多谢讲解.

1.有没有办法不阻塞主线程查询一个进程是否执行完毕?

2.创建一个线程,在构造函数里面转递参数?怎么实现?
能否给个简单代码示例?

3.发送消息通知主线程?
能否给个简单代码示例.

才学C++BUILDER,已经买了3本C++BUILDER的书,但书上都没有讲Windows API以及进程,线程.
请问,这些类容哪里可以找到参考资料?或者推荐本书?
whomin 2008-06-24
  • 打赏
  • 举报
回复
1楼、3楼正解。
主线程创建子线程时就可以传参数(通过构造函数即可),子线程通过发送消息来通知主线程。
jxw1987628 2008-06-24
  • 打赏
  • 举报
回复
发送消息通知主线程
ATmega32 2008-06-24
  • 打赏
  • 举报
回复
多谢楼上.

不过会阻塞主线程.
有没有办法不阻塞主线程查询一个进程是否执行完毕?

如果动态创建一个子线程,再再子线程中等待 另外一个进程执行完毕,这样就不怕阻塞了.

请问这样好实现吗?
主线程怎么传递参数到子线程?子线程怎么返回参数到主线程?
loveshell 2008-06-24
  • 打赏
  • 举报
回复
WaitForSingleObject(进程Handle,超时时长).

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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