网站首页 > 精选教程 正文
让线程休眠特定时间
<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++标准的一部分。
- 上一篇: 什么是线程死锁?形成条件是什么?如何避免?
- 下一篇: Java多线程-线程中断interrupt
猜你喜欢
- 2024-11-23 线程生命周期
- 2024-11-23 线程同步synchronized(不同步的问题、队列与锁),死锁产生和解决
- 2024-11-23 面试突击31:什么是守护线程?它和用户线程有什么区别?
- 2024-11-23 Java之TimeUnit的使用
- 2024-11-23 每日分享- NodeJS 程序中实现线程睡眠
- 2024-11-23 Java 17 多线程中的守护线程
- 2024-11-23 美团面试真题之一个线程OOM,进程里的其他线程还能运行吗?
- 2024-11-23 Java多线程-线程中断interrupt
- 2024-11-23 什么是线程死锁?形成条件是什么?如何避免?
- 2024-11-23 你能说出多线程中sleep、yield、join的用法及sleep与wait区别吗
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)