首页 > 解决方案 > 如何让我的程序在每个给定时间(例如 1/s)只迭代一次?

问题描述

假设我有一个 for 循环,它从 .txt 文件中逐行读取指令,而我希望做的是让程序每秒左右执行一次这些指令。我怎么可能做到这一点?

这是我的循环的代码:

  for(j = 0; j < PC; j++) {             
    txtfilepointer = fopen(listWithTxtFilesToRead[j].name, "r");

    while (fscanf(txtfilepointer, "%c %s", &field1, field2) != EOF ) {

      // here it should be executing the given instruction every second or so...

      printf("whatever the instruction told me to do");
    }
  }

请忽略变量名,这只是为了举例说明。

标签: cfor-looptimerscheduled-tasks

解决方案


让程序每秒左右执行一次这些指令

让它等到所需的时间过去。

假设你想让程序等待一秒或多秒(并且你在一个 POSIX 系统上,比如 Linux,它带来了sleep()),你可以这样做:

#include <time.h> /* for time() */
#include <unistd.h> /* for sleep() */

#define SECONDS_TO_WAIT (3) 

...

  {
    time_t t = time(NULL);

    /* Instructions to execute go here. */

    while ((time(NULL) - t) < SECONDS_TO_WAIT)
    {
      sleep(1); /* Sleep (wait) for one second. */
    }
  }

推荐阅读