ev.events = EPOLLIN | EPOLLET;
timers_map[timer_id] = ptimer; //add or modify
epoll_ctl (epfd, EPOLL_CTL_ADD, timer_id, &ev);
ptimer.timer_start();
return 0;
}
int timers_poll::timers_poll_del_timer(timer& ptimer)
{
int timer_id = ptimer.timer_get_id();
struct epoll_event ev;
ev.data.fd = timer_id;
ev.events = EPOLLIN | EPOLLET;
epoll_ctl (epfd, EPOLL_CTL_DEL, timer_id, &ev);
timers_map.erase(timer_id);
return 0;
}
int timers_poll::run()
{
char buf[128] ={0};
for (; active ; )
{
struct epoll_event events[MAXFDS] ={0};
int nfds = epoll_wait (epfd, events, MAXFDS, -1);
for (int i = 0; i < nfds; ++i)
{
std::map<int, timer>::iterator itmp = timers_map.find(events[i].data.fd);
if (itmp != timers_map.end())
{
//timer ptimer = itmp->second;
while (read(events[i].data.fd, buf, 128) > 0);
itmp->second.get_user_callback()(itmp->second);
}
}
}
}
main.cpp
/*
* File: main.cpp
* Author: Administrator
*/
#include <cstdlib>
#include <iostream>
#include "timer_poll.h"
using namespace std;
int callback(timer &ptimer)
{
printf("timer id=%d:%sn", ptimer.timer_get_id(), (char *) ptimer.timer_get_userdata());
return 0;
}
void *thread_fun(void *data)
{
timers_poll *my_timers = (timers_poll *)data;
my_timers->run();
}
/*
*
*/
int main(int argc, char** argv)
{
timers_poll my_timers(128);
pthread_t thread_id = 0;
pthread_create(&thread_id, NULL, thread_fun, &my_timers);
timer timer1(1.05, callback, (void *) "hello 1",0);
timer timer2(1.10, callback, (void *) "hello 2",0);










