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

多谢楼上.

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

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

请问这样好实现吗?
主线程怎么传递参数到子线程?子线程怎么返回参数到主线程?

发送消息通知主线程

1楼、3楼正解。
主线程创建子线程时就可以传参数(通过构造函数即可),子线程通过发送消息来通知主线程。

多谢讲解.

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

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

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

才学C++BUILDER,已经买了3本C++BUILDER的书,但书上都没有讲Windows API以及进程,线程.
请问,这些类容哪里可以找到参考资料?或者推荐本书?

IsRunCompleted = WaitForSingleObject(Thread->Handle,0)!=WAIT_TIMEOUT;

线程构造函数传参数的方法:
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);