一、线(进)程的等待
在实际的开发场景中,经常遇到一种情况,需要某一线程进行等待一段时间再工作。这种等待可能是一次性的,也可能是定时的;也有可能是间断但时间可等可不等的。举一个简单例子,线程想每隔一分钟去查询一下当前的状态从而决定是否工作。还有某些登陆的回退机制,可能都需要做时间的等待。这就需要开发者提供一套时间处理的方式。
在相关的库和API中,提供了两大类的这种等待的方法。一种是类Sleep的方式(包括usleep等),当前线程单纯睡(休)眠;另外一种是Wait方式,等待一段时间或者永久等待一种触发。下面就这两大类进行一下分析和说明。
二、sleep睡眠等待
一般来说,sleep睡眠方式的等待,在C++11以前C++中并未提供相关的方法,大多是使用相关的OS提供的接口。它们这些接口,虽然应用方式类似,但一些细节是不同的,比如函数的名字在Windows上叫Sleep而在Linux上是sleep。参数的单位也不同,在Windows中,它的单位是毫秒,而在类Linux环境中为秒。
sleep应用的优势在于简单方便,不需要什么额外库支持,一般系统都支持。
下面看例子:
#include <chrono>
#include <iostream>
#include <thread>
#include <unistd.h>
auto now() {
return std::chrono::steady_clock::now(); }
auto awake_time()
{
using std::chrono::operator""ms;
return now() + 2000ms;
}
void testSleep(){
sleep(3)