23,121
社区成员
发帖
与我相关
我的任务
分享
int fd = -1, max_loop = 100;
struct itimerspec new_value;
ssize_t len = 0;
long long sig_timer;
new_value.it_value.tv_sec = 20;
new_value.it_value.tv_nsec = 1000;
new_value.it_interval.tv_sec = 10;
new_value.it_interval.tv_nsec = 1000;
fd = timerfd_create(CLOCK_REALTIME, 0);
if( -1 == fd )
{
printf("Timer create Error!\n");
exit(-1);
}
if( -1 == timerfd_settime(fd, TFD_TIMER_ABSTIME, &new_value, NULL))
{
printf("Timer setting Error:%s\n", strerror(errno));
exit(-1);
}
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
struct timeval tv;
tv.tv_sec = 3;
tv.tv_usec = 1000;
while(max_loop)
{
len = 0;
int retval = select( fd+1, &rfds, NULL, NULL, &tv);
if( retval < 0 )
{
printf("select error \n");
}
if( retval > 0 )
{
if( FD_ISSET(fd, &rfds) )
{
len = read(fd, (void*)&sig_timer, sizeof(long long) );
printf("Loop:%d Len = %u, sig_timer = %lld \n", max_loop, len, sig_timer);
max_loop --;
}
}
else
{
//sleep( 3 );
printf( "select retval %d \n", retval );
}
}