本文最后更新于 2023-07-07,文章内容可能已经过时。

  1. while死循环,并在里面加上sleep(1)就能实现每循环一次花费一秒

  2. 在循环里面获取时间戳,以分钟或小时的秒数取模来判断是否到想要的时间然后再执行操作

例:

实现每小时最后半分钟发送日志功能:

#include <time.h>
 
int main(int argc, char** argv)
{
    int count = 0;
    while(1)
    {
        // 每过27秒判断一次时间,根据观察此处每次最多有三秒延时所以27秒判断一次
      if (count % 27 == 1)
      {
        struct timeval tv;
        gettimeofday(&tv, NULL);
        // 根据秒数控制,五十九分三十秒到六十分之间执行
        if(tv.tv_sec % 3600 >= 3570)
        {
          // example:
          // char current_time[20] = {0};
          // char cmd[30] = {0};
          // struct tm *now;
          // now = localtime(&tv.tv_sec);
          // strftime(current_time, sizeof(current_time), "_%Y-%m-%d-%H_", now);
          // sprintf(cmd, "upload_log %s", current_time);
          // w_system(cmd);
        }
      }
     sleep(1);
     count++;
    }
}