21xrx.com
2025-03-26 01:49:04 Wednesday
文章检索 我的文章 写文章
C++:如何让当前线程睡眠?
2023-07-04 18:22:30 深夜i     27     0
C++ 线程 睡眠 延迟 计时器

在C++编程中,有时需要让当前线程睡眠一段时间,通常情况下是为了等待某些资源或事件的到来。那么,如何让当前线程睡眠呢?

一种简单的方法是使用sleep函数。该函数可以使当前线程睡眠指定的秒数或毫秒数,其声明如下:

void sleep(int milliseconds);

其中,milliseconds为睡眠的毫秒数。例如,如果要让当前线程睡眠3秒,可以使用如下代码:

#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main() {
  cout << "Sleep 3 seconds" << endl;
  this_thread::sleep_for(chrono::seconds(3));
  cout << "Wake up" << endl;
  return 0;
}

这里使用了C++11引入的chrono和thread头文件中的sleep_for函数,可以让当前线程睡眠指定的时间。在这个例子中,当前线程睡眠了3秒,然后输出"Wake up"。

除了使用sleep_for函数,还可以使用sleep_until函数来让当前线程睡眠到指定的时间点。该函数的声明如下:

template<class Clock, class Duration>
void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);

其中,abs_time为要等待的时间点。例如,如果要让当前线程睡眠到2022年1月1日0点0分0秒,可以使用如下代码:

#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main() {
  chrono::system_clock::time_point tp = chrono::system_clock::from_time_t(time(NULL) + 365 * 24 * 60 * 60);
  cout << "Sleep until 2022-01-01 00:00:00" << endl;
  this_thread::sleep_until(tp);
  cout << "Wake up" << endl;
  return 0;
}

这里使用了system_clock类来表示时间点,将其初始化为距离当前时间1年后的时间点,然后让当前线程睡眠到该时间点。在这个例子中,输出"Wake up"的时间应该是2022年1月1日0点0分0秒。

综上所述,让当前线程睡眠可以使用sleep和sleep_for函数,也可以使用sleep_until函数。这些函数可以帮助程序员编写各种等待资源或事件的代码。

  
  

评论区