比方說,我的程序中有一些函數func(),我需要在某個特定的延遲後調用函數。到目前爲止,我GOOGLE了它,並結束了與如下因素代碼:linux C++如何在特定的時間間隔後調用函數
#include <stdio.h>
#include <sys/time.h> /* for setitimer */
#include <unistd.h> /* for pause */
#include <signal.h> /* for signal */
void func()
{
printf("func() called\n");
}
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()一次。 有人能告訴我如何做到這一點?也許,我需要一些額外的參數settimer()?
注意:時間間隔應該是精確的,因爲此程序稍後會播放midi音樂。
嚴重延遲有什麼問題? – 2014-09-27 17:05:16
@ IgnacioVazquez-Abrams,如果你的意思是使用sleep()函數,那麼問題在於它不能提供精確的時間間隔,這對於播放音樂是不可接受的 – floppydisk 2014-09-27 17:09:42
如何在'func()'中停止定時器? – dornhege 2014-09-27 17:11:42