在C中每隔X分钟运行一次命令

时间:2015-10-05 19:04:13

标签: c

我现在正在学习C,但我看不到任何现有的如何每隔X分钟运行命令的例子。

我可以看到有关如何计时命令的例子,但这不是我想要的。

如何在C中每隔X分钟运行一次命令?

4 个答案:

答案 0 :(得分:4)

您不能在标准C99中执行此操作(即,仅使用 语言标准定义的函数)。

您可以在POSIX系统上执行此操作。

假设您专注于Linux系统,请仔细阅读time(7)。然后阅读sleep(3)nanosleep(2)clock_gettime(2)getrusage(2)和其他syscalls(2) ......等等...

问题是定义如果命令运行超过X分钟会发生什么。

阅读一些关于Advanced Linux ProgrammingPosix编程的书。

顺便说一下,Linux有crontab(5),所有相关工具都是free software,所以你可以研究他们的源代码。

答案 1 :(得分:1)

你可以让你的主叫线程here指定秒数。

#include <unistd.h>

unsigned int sleep(unsigned int seconds);

这符合POSIX.1-2001。

sleep是非标准功能。如上所述{{3}}:

  
      
  • 在UNIX上,您应包含<unistd.h>
  •   
  • 在MS-Windows上,Sleep来自<windows.h>
  •   

答案 2 :(得分:0)

要做到这一点,并允许在通话之间发生其他事情,建议使用线程 这是 未经测试的伪代码 ,但是如果您使用的是Linux,它可能看起来像这样:(启动一个线程并使其在工作函数循环中休眠60秒在调用定期函数调用之间)

void *OneMinuteCall(void *param);
pthread_t thread0;

int gRunning == 1;

OneMinuteCall( void * param )
{
    int delay = (int)param;
    while(gRunning)
    {
        some_func();//periodic function
        sleep(delay);//sleep for 1 minute
    }
}

void some_func(void)
{
    //some stuff
}

int main(void)
{
    int delay = 60; //(s)
    pthread_create(&thread0, NULL, OneMinuteCall, delay);
    //do some other stuff
    //at some point you must set gRunning == 0 to exit loop;
    //then terminate the thread

    return 0;
}

答案 3 :(得分:0)

正如user3386109建议的那样,使用某种形式的时钟进行延迟和休眠以减少cpu开销会起作用。提供基本概念的示例代码。请注意,延迟基于时间的原始读数(最后时间根据所需的延迟更新,而不是最后一次读取时钟)。 numsec应设置为60 * X以触发每X分钟。

{app}\uninstall.dll