gpt4 book ai didi

visual-c++ - 从 Win32 应用程序将进程作为同步操作运行

转载 作者:行者123 更新时间:2023-12-04 04:30:56 25 4
gpt4 key购买 nike

我有一个现有的实用程序,我们称它为 util.exe。这是一个命令行工具,它从命令行获取输入,并在磁盘上创建一个文件,比方说一个图像文件

我想通过运行 util.exe 在另一个应用程序中使用它。但是它需要是同步的,以便在处理继续时已知文件存在。

例如(伪)

bool CreateImageFile(params)
{
//ret is util.exe program exit code
int ret = runprocess("util.exe",params);
return ret==0;
}

是否有单个 Win32 API 调用将运行该进程并等待它结束?我查看了 CreateProcess,但它在尝试启动后立即返回,我查看了 ShellExecute,但即使它是同步的,它看起来也有点难看。

最佳答案

没有单一的 api,但这实际上是 Win32 应用程序的一个更有趣的一般性问题。您可以在进程句柄上使用 CreateProcess 或 ShellExecuteEx 和 WaitForSingleObject。此时的 GetExitCodeProcess 将为您提供程序的退出代码。参见 here用于简单的示例代码。

然而,这会完全阻塞您的主线程,并且在某些 Win32 消息传递方案下可能会给您带来严重的死锁问题。假设生成的 exe 执行广播发送消息。在所有窗口都处理完消息之前,它无法继续 - 但你无法继续,因为你被阻止等待它。僵局。由于您使用的是纯命令行程序,因此此问题可能不适用于您。你关心命令行程序是否会挂起一段时间?

普通应用程序的最佳通用解决方案可能是将进程启动和等待拆分到线程中,并在线程运行完成时将消息发回主窗口。当您收到消息时,您知道可以安全继续,并且不存在死锁问题。

关于visual-c++ - 从 Win32 应用程序将进程作为同步操作运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com