如何启动一个程序,直到它启动完成?

dracoo 2004-08-23 11:00:39
VC++开发的应用程序,需要与一个外部程序通信,因此当外部程序未启动时,则由应用程序来启动它,然后进行通信。那么怎么判断外部程序是否已启动完毕?只能用Sleep()来等待吗?
...全文
192 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
freefalcon 2004-08-23
  • 打赏
  • 举报
回复
摘自msdn

The WaitForInputIdle function enables a thread to suspend its execution until the specified process has finished its initialization and is waiting for user input with no input pending. This can be useful for synchronizing a parent process and a newly created child process. When a parent process creates a child process, the CreateProcess function returns without waiting for the child process to finish its initialization. Before trying to communicate with the child process, the parent process can use WaitForInputIdle to determine when the child's initialization has been completed. For example, the parent process should use WaitForInputIdle before trying to find a window associated with the child process.
qwertasdfg123 2004-08-23
  • 打赏
  • 举报
回复
要外部程序关闭后才触发

真的?

它是等待一个进程启动完成。
lemon520 2004-08-23
  • 打赏
  • 举报
回复
WaitForInputIdle(hProcess,INFINITE);要外部程序关闭后才触发?????
你确定?
MSDN上可不是这么说的
寒雪叔叔 2004-08-23
  • 打赏
  • 举报
回复
哦,你是要等程序启动完毕还是等它运行结束,如果是等他运行结束呢就是上面这个程序,如果是等它启动完成,那就更好办了,在那个程序启动完成时发送一个消息广播,这个程序收到消息就知道了嘛




我也顺便问一下,好久没有上CSDN网了,都有近万分没有送出去了,最近上来不知道怎么发贴了,说要上小类里去发贴,但怎么进小类呢,我只能进到推荐类里去,如C/C++社区等.???????????????????????????????????
寒雪叔叔 2004-08-23
  • 打赏
  • 举报
回复
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);



这样就可以了,我也顺便问一下,好久没有上CSDN网了,都有近万分没有送出去了,最近上来不知道怎么发贴了,说要上小类里去发贴,但怎么进小类呢,我只能进到推荐类里去,如C/C++社区等.???????????????????????????????????
freefalcon 2004-08-23
  • 打赏
  • 举报
回复
用命名事件(可以进程间通信)
CreateEvent
WaitForSingleObject
dracoo 2004-08-23
  • 打赏
  • 举报
回复
WaitForInputIdle(hProcess,INFINITE);要外部程序关闭后才触发,我需要的是程序启动完成。外部程序不是我写的。
lemon520 2004-08-23
  • 打赏
  • 举报
回复
如果外部程序是你写的,就可以用事件来解决。
qwertasdfg123 2004-08-23
  • 打赏
  • 举报
回复
WaitForInputIdle(hProcess,INFINITE);
lemon520 2004-08-23
  • 打赏
  • 举报
回复
如果你能修改外部程序或者能和写外部程序的人沟通的话。
可以用事件的方法实现
qwertasdfg123 2004-08-23
  • 打赏
  • 举报
回复
不是GUI程序,可能只有等待了,或者进程间通信。
dracoo 2004-08-23
  • 打赏
  • 举报
回复
对不起,我看错了,把 WaitForInputIdle 看成 WaitForSingleObject 了,WaitForInputIdle 是在进程启动完成后获得响应,可是我的外部程序不是GUI应用程序,WaitForInputIdle 还是没用。还有没有其它办法?

65,186

社区成员

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

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