【发布时间】:2015-09-18 19:44:07
【问题描述】:
我正在编写一个从主程序调用的小型更新程序实用程序。主程序在调用后立即终止,并让更新程序复制所有更新的文件,然后它应该重新启动主程序。然而,最后一点开始让我头疼。
我可以用std::system(我知道,不安全,但可移植)运行程序就好了,但是更新程序只是挂在那里等待主程序完成。我一直在寻找使调用触发并忘记的方法,而线程似乎是最好的主意。
但是:
std::system("app");
在等待从system 返回时挂起更新程序。而这个:
std::thread(std::system, "app").detach();
也不是变体
std::thread t(std::system, "app");
t.detach();
似乎什么都做。但是当我加入线程时:
std::thread t(std::system, "app");
t.join();
它确实运行了应用程序,但仍然像在原始代码中一样等待它的返回。为什么分离的线程不能运行应用?
【问题讨论】:
-
您需要什么级别的可移植性(即感兴趣的平台)?
-
@JasonR 主应用程序是一个 Qt 应用程序,我的目标是 3 个 Qt 平台:桌面、linux 和 mac...
-
QProcess 不合适吗?
-
@NicolasHolthaus 不幸的是,是的。我不能使用静态构建的 Qt,因此任何基于 Qt 的更新程序本身都会依赖于 Qt。因此,我需要关闭 Qt 应用程序(使用 QProcess 调用更新程序)并使用非 Qt 外部更新程序来完成工作并重新启动 Qt 应用程序或维护两个 Qt 部署(一个用于应用程序,一个用于updater) 并在更新时同时更新两者。我认为外部非 Qt 应用程序会是更好的解决方案。
标签: c++ multithreading stdthread