我现在正在学习C,但我看不到任何现有的如何每隔X分钟运行命令的例子。
我可以看到有关如何计时命令的例子,但这不是我想要的。
如何在C中每隔X分钟运行一次命令?
答案 0 :(得分:4)
您不能在标准C99中执行此操作(即,仅使用 语言标准定义的函数)。
您可以在POSIX系统上执行此操作。
假设您专注于Linux系统,请仔细阅读time(7)。然后阅读sleep(3),nanosleep(2),clock_gettime(2),getrusage(2)和其他syscalls(2) ......等等...
问题是定义如果命令运行超过X分钟会发生什么。
阅读一些关于Advanced Linux Programming或Posix编程的书。
顺便说一下,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