21xrx.com
2024-06-03 05:37:42 Monday
登录
文章检索 我的文章 写文章
C++:如何让当前线程睡眠?
2023-07-04 18:22:30 深夜i     --     --
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函数。这些函数可以帮助程序员编写各种等待资源或事件的代码。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复