gpt4 book ai didi

c++ - 是否有忙等待条件或直到超时的标准功能

转载 作者:行者123 更新时间:2023-11-30 03:16:33 25 4
gpt4 key购买 nike

我需要在我的程序中等待一个子系统。在不同的地方要等待不同的条件。我知道我还可以使用线程和条件变量。但是由于子系统(用 C 语言编程的裸机)是通过共享内存连接的,没有注册中断——一个线程无论如何都需要轮询。

所以我做了以下模板,以便能够等待任何事情。我想知道是否已经有一个可用于此的 STL 函数?

#include <chrono>
#include <thread>


//given poll interval
template<typename predicate,
typename Rep1, typename Period1,
typename Rep2, typename Period2>
bool waitActiveFor(predicate check,
std::chrono::duration<Rep1, Period1> x_timeout,
std::chrono::duration<Rep2, Period2> x_pollInterval)
{
auto x_start = std::chrono::steady_clock::now();
while (true)
{
if (check())
return true;

if ((std::chrono::steady_clock::now() - x_start) > x_timeout)
return false;

std::this_thread::sleep_for(x_pollInterval);
}
}

//no poll interval defined
template<typename predicate,
typename Rep, typename Period>
bool waitActiveFor(predicate check,
std::chrono::duration<Rep, Period> x_timeout)
{
auto x_start = std::chrono::steady_clock::now();
while (true)
{
if (check())
return true;

if ((std::chrono::steady_clock::now() - x_start) > x_timeout)
return false;

std::this_thread::yield();
}
}

running sample


2019-05-23:关于评论和答案的代码更新

最佳答案

据我所知不是。一般来说,目标是在不消耗时钟周期的情况下等待,因此标准库适合这种用法。

我知道 std::this_thread::yield() 这是我在忙等待时通常使用的,但是因为你有一个轮询间隔, sleep_for() 可能是您最好的选择。

关于c++ - 是否有忙等待条件或直到超时的标准功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56261102/

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