无限循环和时间

时间:2015-01-03 11:07:23

标签: c date unix infinite-loop time.h

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

 #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;
}

1 个答案:

答案 0 :(得分:1)

您的问题是计算机运行速度太快,以至于可以在同一秒内多次调用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
  }
}