gpt4 book ai didi

qt - 如何启动分离进程并等待父进程终止?

转载 作者:行者123 更新时间:2023-12-04 02:18:12 28 4
gpt4 key购买 nike

使用 QProcess 实现更新程序,我从我的应用程序启动一个分离进程并立即退出。在生成的更新程序进程中,我将根据需要覆盖文件,然后再次启动主应用程序。问题是,如果主应用程序没有“足够快”地关闭以在更新程序开始覆盖它们之前释放所有加载的库,那么文件更新有时会失败。一种方法是等待任意时间,如 1 秒,然后开始更新,但我宁愿实现一些实际检查父进程是否不再运行的东西。我可以在生成它时传递它的 ID,但这并没有真正削减它,因为似乎没有诸如 bool QProcess::isRunning(qint64 pid) 之类的函数。我也不认为跨应用程序连接信号和槽是可能的……有什么想法吗?

最佳答案

您可以使用 QSystemSemaphore两个应用程序中的类等待。

应用:

int main()
{
QSystemSemaphore sem( "some_uuid", 1, QSystemSemaphore::Create );
sem.acquire();
// ...
app.exec();

// TODO: start updater
// sem.release(); // not sure, that it will not be done automatically
return 0;
}

更新者:

int main()
{
QSystemSemaphore sem( "some_uuid", 1, QSystemSemaphore::Open );
sem.acquire(); // Will wait for application termination
// ...
app.exec();
return 0;
}

您不应该忘记错误处理。并且您应该尝试以完全访问权限从“updater.exe”打开和关闭文件“yourapp.exe”,以确保该应用程序已关闭。

要获得 100% 的结果,最好使用特定于平台的 API。

关于qt - 如何启动分离进程并等待父进程终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32778416/

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