diff --git a/includes/net/timer.hpp b/includes/net/timer.hpp new file mode 100644 index 0000000..b5f6330 --- /dev/null +++ b/includes/net/timer.hpp @@ -0,0 +1,18 @@ +#pragma once +#include "fd_event.hpp" +#include "reactor.hpp" + + +namespace tinyrpc { + + class Timer : FdEvent { + + public: + + Timer(Reactor::Task cb = FdEvent::m_default_callback); + ~Timer(); + private: + // TODO .... 完善 Timer 类 + }; + +} \ No newline at end of file diff --git a/src/net/timer.cc b/src/net/timer.cc new file mode 100644 index 0000000..7ca8e6e --- /dev/null +++ b/src/net/timer.cc @@ -0,0 +1,26 @@ +#include "timer.hpp" +#include "fd_event.hpp" +#include "logger.hpp" +#include +#include +#include +namespace tinyrpc { + + Timer::Timer(Reactor::Task cb /* = FdEvent::m_default_callback */) { + m_fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC); + if(m_fd == -1) { + logger() << "timerfd_create ret -1 err:" << strerror(errno); + exit(-1); + } + addListenEvent(IOEvent::READ); + setReadCallback(cb); + } + + Timer::~Timer() { + int ret = close(m_fd); + if(ret == -1) { + logger() << "close ret -1 err:" << strerror(errno); + // exit(-1); + } + } +} \ No newline at end of file