如何使用win32 CreateProcess函数等到孩子完成写入文件

Posted

技术标签:

【中文标题】如何使用win32 CreateProcess函数等到孩子完成写入文件【英文标题】:How to use win32 CreateProcess function to wait until the child done to write to file 【发布时间】:2011-05-06 07:05:12 【问题描述】:

你好 我不是 win32 程序员,它对我来说是全新的。 我喜欢从我的父 win32 应用程序打开进程(好的,我知道该怎么做) 子进程然后写入文本文件并自行关闭它。我如何在父应用程序中检测到子应用程序已完成写入文本文件。然后从父应用读取文本文件。这都是在win32 c++中 谢谢

【问题讨论】:

您可以等待子进程终止,还是需要在子进程仍在运行时开始写入文件? 执行写入文件的子进程(Qt 应用程序) 【参考方案1】:

PROCESS_INFORMATION 结构(它是 CreateProcess 的最后一个参数)包含成员 hProcess。这是新进程的句柄,您可以使用WaitForSingleObject 等待。

【讨论】:

【参考方案2】:

对 Benoits 的回答稍作修改。您可以在父进程中创建一个事件并使用 WaitForSingleObject 等待该事件。然后,孩子可以通过调用 SetEvent 来发出此事件的信号。

http://msdn.microsoft.com/en-us/library/ms686211%28v=vs.85%29.aspx

重要的是子进程将继承所有可继承的句柄,因此 CreateProcess 必须将第五个参数设置为 true (bInheritHandles)。

这样子进程不必退出来检查文件是否已写入。

【讨论】:

这太复杂了。等到进程发出信号。 问题中并没有说子进程应该退出,因此你不能假设它。【参考方案3】:

如果您的孩子将在文件创建后退出,您可以使用::WaitForSingleObject 使用::CreateProcess 返回的进程句柄。

【讨论】:

以上是关于如何使用win32 CreateProcess函数等到孩子完成写入文件的主要内容,如果未能解决你的问题,请参考以下文章

C头文件如何导入win32api函数?

Win32 API 类似于 CreateProcess,但适用于 bat/cmd/等。 (即使用 PATHEXT)

使用 CreateProcess 从 Win32 C++ 应用程序启动 Java 应用程序时出错

为啥 CreateProcess 给出错误 193(%1 不是有效的 Win32 应用程序)

WIN32创建进程CreateProcess

如何使用 CreateProcess 函数正确调用“telnet”?