c语言如何让程序1秒运行1次,在C中每x秒执行一次方法

你可以产生一个新的线程:

void *threadproc(void *arg)

{

while(!done)

{

sleep(delay_in_seconds);

call_function();

}

return 0;

}

...

pthread_t tid;

pthread_create(&tid,NULL,&threadproc,NULL);

void on_alarm(int signum)

{

call_function();

if(!done)

alarm(delay_in_seconds); // Reschedule alarm

}

...

// Setup on_alarm as a signal handler for the SIGALRM signal

struct sigaction act;

act.sa_handler = &on_alarm;

act.sa_mask = 0;

act.sa_flags = SA_RESTART; // Restart interrupted system calls

sigaction(SIGALRM,&act,NULL);

alarm(delay_in_seconds); // Setup initial alarm

当然,这两种方法都存在这样的问题,即您定期调用的函数需要是线程安全的.

信号方法特别危险,因为它也必须是异步安全的,这很难做到 – 即使是像printf这样简单的东西也不安全因为printf可能会分配内存,如果SIGALRM中断了对malloc的调用,你就是陷入困境,因为malloc不可重入.所以我不建议使用signal方法,除非你所做的只是在信号处理程序中设置一个标志,后来由其他一些函数检查,这会让你回到与线程版本相同的位置.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值