我正在编写一个小型更新程序,该程序从主程序中调用。主程序在调用后立即终止,让更新程序复制所有更新文件,然后应该重新启动主程序。然而,最后这一部分开始让我头疼。
我可以使用
然而,下面的代码:
挂起更新程序,因为它在等待
不变式
我可以使用
std::system
运行程序(我知道不安全,但是可移植),但更新程序会卡在那里等待主程序完成。我正在寻找使呼叫“fire & forget”并使线程像最佳方法的方式。然而,下面的代码:
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();
它确实可以运行应用程序,但仍像原始代码一样等待其返回。为什么分离的线程无法运行该应用程序?