gpt4 book ai didi

c++ - 在后台运行函数直到完成 MinGW + Windows

转载 作者:行者123 更新时间:2023-11-28 03:22:01 26 4
gpt4 key购买 nike

我正在用 C++ 编写一些东西,其中包括一个倒计时函数,该函数在它达到 0 时设置一个值。我已经研究线程/pthreads/boost 线程几个小时了,但我似乎什么也得不到工作,所以我理想地寻找需要用我的代码做什么的演练。我是 C++ 的新手,但是并发性超出了我之前研究过的任何语言,无论语言如何。

我想在后台运行的功能是:

void Counter::decrementTime(int seconds){
while(seconds != 0){
seconds--;
Sleep(1000);
}
bool = false;
}

它将通过一些简单的方式被调用(这只是为了举例):

void Counter::setStatus(string status){
if(status == "true"){
bool = true;
decrementTime(time); // Needs to run in background.
} else if (status != "false"){
bool = false;
}
}

我已经尝试过各种尝试,例如 std:thread myThread(decrementTime, time); 以及其他各种尝试(正确包含所有 header 等)。

如果有人能帮我解决这个问题,我将不胜感激。我不需要监视正在运行的函数或任何东西,我需要它做的就是在它到达那里时设置 bool 。我正在使用启用了 -std=c++11 的 MinGW 编译器运行 Windows,正如我之前提到的,我很想解决这个问题(并解释它是如何解决的),这样我就可以更好地掌握这个概念!

哦,如果有另一种(更好的)方法可以在没有线程的情况下执行此操作,也请随时分享您的知识!

最佳答案

您可以使用 std::atomic_bool 作为标志,并使用 std::async 在单独的线程中启动时间:

#include <atomic>
#include <chrono>
#include <future>

std::atomic_bool flag{true};

void countDown(int seconds){
while(seconds > 0){
seconds--;
std::this_thread::sleep_for(std::chrono::miliseconds( ?? )); //
}
flag = false;
}

auto f = std::async(std::launch::async, std::bind(countDown, time));

// do your work here, checking on flag
while (!flag) { ... }

f.wait(); // join async thread

关于c++ - 在后台运行函数直到完成 MinGW + Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15169209/

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