gpt4 book ai didi

c++ - 替代 std::this_thread::sleep_for()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:48 27 4
gpt4 key购买 nike

我有一个循环,我想确保它在每个循环中运行(大约)固定的时间量。

我正在使用 sleep_for 来实现此行为,但我也希望程序能够在不完全支持标准线程库的环境中编译。现在我有这样的东西:

using namespace std;
using namespace std::chrono;

//
while( !quit )
{
steady_clock::time_point then = steady_clock::now();

//...do loop stuff

steady_clock::time_point now = steady_clock::now();
#ifdef NOTHREADS
// version for systems without thread support
while( duration_cast< microseconds >( now - then ).count() < 10000 )
{
now = steady_clock::now();
}

#else
this_thread::sleep_for( microseconds{ 10000 - duration_cast<microseconds>( now - then ).count() } );
#endif

}

虽然这允许程序在不支持标准线程的环境中编译,但它也非常占用 CPU,因为程序会不断检查时间条件,而不是等到它为真。

我的问题是:在不完全支持线程的环境中,是否有一种资源密集度较低的方法可以仅使用标准 C++(即不提升)来启用这种“等待”行为?

最佳答案

有很多基于时间的函数,这在很大程度上取决于您使用的操作系统。

Microsoft API 提供 Sleep()(大写 S),可让您进入毫秒级 sleep 。

在 Unix (POSIX) 下你有 nanosleep()。

我认为这两个函数应该能让您在大多数计算机上运行。

实现将使用相同的循环,但在 while() 循环中稍作休眠。这仍然是一个像池一样的东西,但 更快 CPU 密集度要低得多。

另外,作为 n.m.提到, select() 具有这种能力。只是实现起来有点复杂,但预计会在时间过去后返回。

关于c++ - 替代 std::this_thread::sleep_for(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333561/

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