AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

C++ 的延时函数


方法一

在Linux下,我们这样使用:

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <unistd.h>

int main(void){
  while(1){
      std::cout << "Hello World!" << std::endl;
      sleep(1); //单位是秒
  }
  return 0;
}

我们使用#include <unistd.h>头文件里面的sleep()函数,给这个函数传入的形参是以秒为单位的正整数。


上面的程序执行的效果应该是:以一秒为单位打印Hello World!这个字符串。

或者形参传入以微秒为单位(1000,000微秒 = 1秒)的数据:

usleep()函数的详细介绍:这里

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <unistd.h>

int main(void){
  while(1){
      std::cout << "Hello World!" << std::endl;
      usleep(1000000); //单位是微秒 1000000us = 1s
  }
  return 0;
}

方法三

C++11里面,你可以这样使用:

我使用的是Qt5,在Qt5里面使用C++11,你需要在项目的.pro文件里面添加下面的这句代码:

1
CONFIG += c++11

如果你不在.pro文件中添加上面的这句代码,你就使用不了下面代码里面的std::this_thread

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <chrono>
#include <thread>

int main(void){
  while(1){
      std::cout << "Hello World!" << std::endl;
      std::this_thread::sleep_for(std::chrono::milliseconds(1000)); //单位是毫秒
  }
  return 0;
}

方法四

如果你使用了Boost库,那么你可以使用下面的代码实现延时的功能:

Linux系统安装Boost库很简单,只需要执行: sudo apt-get install libboost-dev

我使用的是QT项目,所以我们需要在.pro文件中,添加boost库的头文件路径和链接文件的路径:

1
2
3
HEADERS += /usr/include/

LIBS += -L/usr/lib/x86_64-linux-gnu -lboost_system -lboost_thread
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <boost/thread/thread.hpp>

int main(void){
  while(1){
      std::cout << "Hello World!" << std::endl;
      boost::this_thread::sleep( boost::posix_time::milliseconds(1000) ); //单位是毫秒
  }
  return 0;
}

或者:

1
boost::this_thread::sleep( boost::posix_time::seconds(1) ); //单位是秒

参考网站:Sleep for milliseconds

Comments