gpt4 book ai didi

c++ - 运行一个应用程序并以便携的方式忘记

转载 作者:太空狗 更新时间:2023-10-29 21:17:33 25 4
gpt4 key购买 nike

我正在编写一个从主程序调用的小型更新实用程序。主程序在调用后立即终止,让更新程序复制所有更新的文件,然后它应该重新启动主程序。然而,最后一点开始让我头疼。

我可以用 std::system 运行程序(我知道,不安全,但可移植)就好了,但是更新程序只是卡在那里等待主程序完成。我正在寻找使调用触发并忘记的方法,线程似乎是最好的主意。

但是这样:

std::system("app");

在等待从系统 返回时挂起更新程序。而这:

std::thread(std::system, "app").detach();

也不是变体

std::thread t(std::system, "app");
t.detach();

似乎无所不能。但是当我加入线程时:

std::thread t(std::system, "app");
t.join();

它确实运行了该应用程序,但仍然像在原始代码中一样等待其返回。为什么分离线程不能运行应用程序?

最佳答案

任何线程,无论是否分离,都会在其进程结束时死亡(在大多数系统上)。在更新程序结束执行之前给一些时间,线程可能能够真正进行调用:

#include <chrono>
#include <cstdlib>
#include <thread>

void do_app() {
std::system("app");
}

int main() {
std::thread(do_app).detach();
std::this_thread::sleep_for(std::chrono::seconds(2));
}

关于c++ - 运行一个应用程序并以便携的方式忘记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659884/

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