JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

C++ 让线程休眠特定时间

wys521 2024-11-23 23:46:17 精选教程 36 ℃ 0 评论

让线程休眠特定时间

<thread>头文件提供了两个函数来使线程休眠,即sleep_for()和sleep_until(),这两个函数都在std::this_thread命名空间中。

本示例将探讨这些函数的使用,因为稍后在本章中我们将使用它们。

如何做……

让我们看看如何使用sleep_for()和sleep_until()函数:

与休眠相关的函数在std::this_thread命名空间中。因为这个命名空间只有几个符号,我们将直接为std::this_thread和std::chrono_literals发出using指令:

using namespace std::this_thread;  
using namespace std::chrono_literals;


chrono_literals命名空间有表示持续时间的符号,如1s表示一秒,或100ms表示100毫秒。

在main()函数中,我们将使用steady_clock::now()标记一个时间点,以便我们可以测试时间:

int main() {  
    auto t1 = steady_clock::now();  
    cout << "sleep for 1.3 seconds\n";  
    sleep_for(1s + 300ms);  
    cout << "sleep for 2 seconds\n";  
    sleep_until(steady_clock::now() + 2s);  
    duration<double> dur1 = steady_clock::now() - t1;  
    cout << format("total duration: {:.5}s\n", dur1.count());  
}


sleep_for()函数接受一个duration对象来指定休眠的时间量。参数(1s + 300ms)使用chrono_literal运算符返回一个表示1.3秒的duration对象。

sleep_until()函数接受一个time_point对象来指定从休眠中恢复的具体时间。在这种情况下,chrono_literal运算符用于修改steady_clock::now()返回的time_point对象。

这是我们的输出:

sleep for 1.3 seconds  
sleep for 2 seconds  
total duration: 3.3005s


它是如何工作的……

sleep_for(duration)和sleep_until(time_point)函数将当前线程的执行挂起指定的持续时间,或者直到达到time_point。

如果支持,sleep_for()函数将使用steady_clock实现。否则,持续时间可能受时间调整的影响。由于调度或资源延迟,这两个函数可能会阻塞更长时间。

还有更多……

一些系统支持POSIX函数sleep(),该函数将执行挂起指定的秒数:

unsigned int sleep(unsigned int seconds);


sleep()函数是POSIX标准的一部分,不是C++标准的一部分。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表