linux c++如何在特定的时间间隔后调用函数
linux c++ how to call function after specific time interval
假设我的程序中有一些函数func(),我需要在特定的延迟后调用它。到目前为止,我在谷歌上搜索了一下,结果得到了以下代码:
#include <stdio.h>
#include <sys/time.h> /* for setitimer */
#include <unistd.h> /* for pause */
#include <signal.h> /* for signal */
void func()
{
printf("func() calledn");
}
bool startTimer(double seconds)
{
itimerval it_val;
double integer, fractional;
integer = (int)seconds;
fractional = seconds - integer;
it_val.it_value.tv_sec = integer;
it_val.it_value.tv_usec = fractional * 1000000;
it_val.it_interval = it_val.it_value;
if (setitimer(ITIMER_REAL, &it_val, NULL) == -1)
return false;
return true;
}
int main()
{
if (signal(SIGALRM, (void(*)(int))func) == SIG_ERR)
{
perror("Unable to catch SIGALRM");
exit(1);
}
startTimer(1.5);
while(1)
pause();
return 0;
}
它是有效的,但问题是settimer()导致func()以1.5秒的间隔被重复调用。我需要的是只调用一次func(。有人能告诉我怎么做吗?也许,我需要一些额外的参数来设置timer()?
注意:时间间隔应该精确,因为这个程序稍后会播放迷笛音乐。
除非你需要程序做其他事情,否则你可以只睡分配的时间。
如果您需要使用警报器,您可以安装一次要处理的警报器。
来自手册页:
结构时间间隔it_interval
这是连续定时器中断之间的时间段。如果为零,则报警将只发送一次。
代替您的代码:
it_val.it_interval = it_val.it_value;
我会设置:
it_val.it_interval.tv_sec = 0;
it_val.it_interval.tv_usec = 0;
除了您已经设置的it_val.it_value之外。您所做的是对两个结构使用相同的值,这就是为什么您会看到重复的间隔。
相关文章:
- rcpp函数中的清理时间很长
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 函数的时间复杂度是多少?
- 在多个时间戳处执行函数
- 如何计算此排序函数的时间复杂度?
- C++不重载时间函数,所以我们不需要写 NULL 有什么原因吗?
- C 时间函数问题
- C 时间函数在不同的呼叫下返回相同的值
- 线程:如何在C或C++中精确计算算法的执行时间(函数的持续时间)
- 使用时间函数后,字符串已损坏
- 为srand()提供Windows的时间函数
- 快速时间函数C/C++
- 什么可能导致时间函数和 DLL 加载之间死锁
- 时间函数有时有效有时不起作用
- 任何时间函数保证为调用返回不同的值
- srand函数如何与时间函数相互作用
- 计算时间增量最快的linux C时间函数是什么?看到clock_gettime和gettimeofday表现不佳
- C++,时间函数(Linux)-纳秒分辨率
- 如何挂钩时间函数
- 使用srand和时间函数的差异