延时函数delay(),sleep(),usleep()

推荐使用以下延迟:

#include <unistd.h>  // 在gcc编译器中,使用的头文件因gcc版本的不同而不同
sleep(10);  //程序挂起10s 
usleep(100);  //程序挂起100us

可以参考:Linux的sleep()和usleep()的使用和区别: https://blog.csdn.net/shenwansangz/article/details/50108197


也可以使用下面方法:

#include <time.h>       /* 调用时务必加上该头文件 */
// 自定义的一个延时函数delay()
void delay(int seconds) //  参数必须为整型,表示延时多少秒
{
    clock_t start = clock();
    clock_t lay = (clock_t)seconds * CLOCKS_PER_SEC;
    while ((clock()-start) < lay);
 }

void delay(double seconds) //  参数为双精度浮点型。这个函数是我修改的上面那个函数,重载一下。
 {
    double start = clock();
    double lay = (double)seconds * CLOCKS_PER_SEC;
    while ((clock()-start) < lay);
 }

百度Apollo里面用的是延时微秒usleep(unsigned int __useconds)和延时秒sleep(unsigned int __seconds)函数,他们的输入参数也都是整数,不能为浮点数,
比如不能sleep(0.5)来表示延时0.5s。 但是当函数设定的计时器到期,或者接收到信号、程序发生中断都会导致程序继续执行。


计算运行时间的函数:
#include <ctime>
#include <iostream>
// g++ test.cpp `pkg-config opencv --libs --cflags` -std=c++11 -pthread -o test

int main() {
  clock_t timr_start = clock();
  double a = 12345 * 54321;
  std::cout << "time use " << (clock() - timr_start) / (double)CLOCKS_PER_SEC
            << "s" << std::endl;
  std::cout << "time use "
            << 1000 * (clock() - timr_start) / (double)CLOCKS_PER_SEC << "ms"
            << std::endl;
}            

下面是运行两次该程序的截图:
在这里插入图片描述
在这里插入图片描述
可知,计算程序运行时间,最好使用毫秒ms,因为使用秒s会有精度损失。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐