gpt4 book ai didi

C++如何实现一个可停止的 future 函数调用?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:04 24 4
gpt4 key购买 nike

我想在超时后执行一个函数,比如:

sleep(1000); 
doWork();

但是在达到超时之前,我可以在这个线程或其他线程中停止执行,比如:

if(someCondition)
{
stop the doWork() it is not started.
}

是否有任何现有的 std/boost 类来执行此类任务?

最佳答案

您可以结合使用指示工作是否需要完成的变量与定时条件变量的组合:您将等待休眠时间,如果等待终止,您将检查是否应中止工作,需要更多 sleep (条件变量总是可以停止虚假等待),或者可以开始工作:

bool                    do_work(true);
std::mutex mutex;
std::condition_variable condition;

std::chrono::time_point<std::chrono::steady_clock> abs_time(
std::chrono::steady_clock::now() + std::chrono::milliseconds(1000));
std::unique_lock<std::mutex> kerberos;
if (condition.wait_until(kerberos, abs_time, [&]{ return do_work; })) {
// do the work
}

取消工作的另一个线程将获取互斥锁,将do_work设置为false,并将notify_one()设置为条件变量.

关于C++如何实现一个可停止的 future 函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101975/

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