无限循环和时间

Infinite Loop and time

我正在尝试比较给定日期何时对应于当前时间,当发生这种情况时它应该执行程序。我使用了一个无限循环,以便它等待给定时间对应于当前时间,问题是当发生这种情况时它会多次执行程序,我不知道如何解决这个问题......

 #include <unistd.h> 
#include <sys/wait.h> 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int taskexecution()
{   
    char * path;
    path = "/home/soraia/mieti/Proj/makefile";


    pid_t fk = fork();
    if (!fk) { /* in child */

        chdir("/home/soraia/mieti/Proj");
        execlp ("make", "make", "-f", path , NULL);

        _exit(127); 
    } 
    else if (fk == -1) 
    {    
        perror("fork"); /* print an error message */
    }
    return 0;
}

void time()
{

  struct tm  data;

  data.tm_year=2015-1900;
  data.tm_mon=1-1;
  data.tm_mday=03;
  data.tm_hour=10;
  data.tm_min=49;
  data.tm_sec=10;
  data.tm_isdst = -1;

  if(mktime(&data) == time(NULL))

   {
    taskexecution();
  }
}

int main ()
{
  while(1)
  {
    time(); 
  }
  return 0;
}

您的问题是计算机 运行 速度太快,以至于您的 time() 函数可以在同一秒内被调用多次。您需要的是确保您的函数在执行 运行 任务后停止 while 循环,或者禁止执行任务:

第一个:

int time()
{
  struct tm  data;   
  data.tm_year=2015-1900;
  data.tm_mon=1-1;
  data.tm_mday=03;
  data.tm_hour=10;
  data.tm_min=49;
  data.tm_sec=10;
  data.tm_isdst = -1;   
  if (mktime(&data) == time(NULL))   
   {
    taskexecution();
    return 0; // returns 0 to stop while
  }
  return 1; // returns 1 to let the while continue
}

int main ()
{
  while(time());
  return 0;
}

第二个:

void time()
{
  static int ran = 0; // static variable: 0 is task not already executed, 1 else
  struct tm  data;
  data.tm_year=2015-1900;
  data.tm_mon=1-1;
  data.tm_mday=03;
  data.tm_hour=10;
  data.tm_min=49;
  data.tm_sec=10;
  data.tm_isdst = -1;
  if(ran==0 && mktime(&data) == time(NULL))
   {
    taskexecution();
    ran = 1; // Ok execution took place
  }
}