【问题标题】:Execute function according to time按时间执行功能
【发布时间】:2017-03-31 19:53:06
【问题描述】:

我正在尝试为每分钟执行 execute_func 函数创建一种方式。

我试图在几分钟内循环,但是该函数从未在函数下方执行

void main(void) {
    time_t timer;
    struct tm* tmr;

    timer = time(NULL);
    tmr = localtime(&timer);

        if (tmr->tm_min == 1)
            execute_func();
    }
    return;
}

【问题讨论】:

  • 你正在从你的函数中回调main??在一个活动的 CPU 循环中测试从 0 到 59 的值?这很奇怪。提示:哪个函数调用你的execute_func?那将是main,所以你在没有基本情况的情况下递归地调用main...
  • main 中有时间调用另一个函数会更常见。
  • tmr->tm_min 在 0 和 59 之间,为什么要循环呢?
  • 请张贴Minimal, Complete, and Verifiable example 显示问题,而不是幻想您的代码。
  • 您在tmr 结构中填写一次localtime(),然后在循环中您只需将tm_min 与从0 到59 的所有数字进行比较,其中一个总是成功的。这根本不需要时间,所以你只会不断地调用这个函数。您实际上需要等待。比如sleep(60)

标签: c


【解决方案1】:

在 linux 系统上,系统调用就可以了。下面是一个每隔一分钟执行一段代码或调用一个函数的例子:

while(true) 
    {
      system("sleep 60s"); 
      computeAFunction(); /* The function that you want to execute after every one minute */

       if( (true ) /* some code that you want to execute */
       {
         exit(0); /* if true exit */

                 }
       else
         {
            continue; /* or else keep running */
               }

      }

我个人使用过这个,当我想继续计算一个随时间变化的特定值时,我不得不对新计算的值做出决定。 您可以根据自己的需要对其进行一些修改。

或者,您可以使用在 windows 系统上的 windows.h 头文件和 linux 上的 unistd.h 中定义的 sleep() 函数。

sleep(1000) 等于 sleep 1s。

【讨论】:

    【解决方案2】:

    你的启动程序怎么样? 我的意思是你的主函数调用execute_func,函数execute_func再次调用main。太奇怪了。

    如果你只是想做一些周期性的工作。你可以把这些工作放到另一个非主函数中。并且可以同时使用任意延迟功能。

    void PeriodicJob()
    {
      xxx;
    }
    
    main()
    {
      for (;;)
      {
        Sleep(60000); // You can use this function on windows platform. Notice that you must include windows.h first.
        // Or you can write your own delay function too.
        PeriodicJob();
      }
      return 0;
    }
    

    如果你想定期运行一个程序。那是你的操作系统的工作。尝试在您的操作系统上使用任务计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-26
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多