1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include "Timer.h"
#include "Epoll.h"
#include <time.h>
#include <sys/timerfd.h>
#include <stdio.h>
Timer::Timer()
{
}
BaseClassSwitch::Type Timer::getType()
{
return BaseClassSwitch::Type::Timer;
}
bool Timer::init()
{
if((tfd=::timerfd_create(CLOCK_MONOTONIC,TFD_NONBLOCK)) < 0)
{
perror("timerfd create error");
return false;
}
timespec now;
if (clock_gettime(CLOCK_REALTIME, &now) == -1)
{
perror("clock_gettime");
return false;
}
itimerspec new_value;
new_value.it_value.tv_sec = now.tv_sec + 2;
new_value.it_value.tv_nsec = now.tv_nsec;
new_value.it_interval.tv_sec = 1;
new_value.it_interval.tv_nsec = 0;
int result=::timerfd_settime(tfd, TFD_TIMER_ABSTIME, &new_value, NULL);
if(result<0)
{
perror("settime error");
return false;
}
epoll_event event;
event.data.ptr = this;
event.events = EPOLLIN | EPOLLET | EPOLLONESHOT | EPOLLWAKEUP | EPOLLMSG;
if(Epoll::epoll.ctl(EPOLL_CTL_ADD,tfd,&event) < 0)
{
perror("epoll_ctl error");
return false;
}
return true;
} |