現象及結論:
由此可見,主函數任務負載對定時器定時精度影響不大~
測試代碼:
#include<iostream>
#include<sys/time.h>
#include<signal.h>
#include<unistd.h>//sleep
using namespace std;
void testFun(int a)
{
int t_ = 0;
//測試定時器任務負載對定時精度的影響
// while(1)
// {
// t_ ++;
// if( t_ > 2000000000)
// {
// cout << "t_ = " << t_ << endl;
// struct timeval curtime;
// gettimeofday(&curtime,NULL);
// cout << " curtime.tv_sec:" << curtime.tv_sec << endl;
// cout << " curtime.tv_usec:" << curtime.tv_usec << endl;
// break;
// }
// }
cout << "Hello,Linux timer~" << endl;
//exit(0);
}
int main()
{
struct timeval curtime;
gettimeofday(&curtime,NULL);
cout << "curtime.tv_sec:" << curtime.tv_sec << endl;
cout << "curtime.tv_usec:" << curtime.tv_usec << endl;
struct itimerval timer;
//週期定時器間隔
timer.it_interval.tv_sec =1;
timer.it_interval.tv_usec = 0;//0.5s=500ms=500*1000us
//從設置定時器開始到第一次定時器生效的時間
timer.it_value.tv_sec = 1;//1秒
timer.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
signal(SIGALRM, testFun);
int i = 0;
while(1)
{
i++;
//testFun(1);
cout << "背景循環次數:" << i << endl;
// usleep(1000*500);
//sleep(10);
//測試主函數任務負載對定時器的影響
int t_ = 0;
while(1)
{
t_ ++;
if( t_ > 2000000000)
{
cout << "t_ = " << t_ << endl;
struct timeval curtime;
gettimeofday(&curtime,NULL);
cout << " curtime.tv_sec:" << curtime.tv_sec << endl;
cout << " curtime.tv_usec:" << curtime.tv_usec << endl;
break;
}
}
};
return 0;
}