1
This commit is contained in:
parent
28ec90a305
commit
e899665c7d
@ -1,5 +1,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/epoll.h>
|
||||||
|
|
||||||
#include <sys/eventfd.h>
|
#include <sys/eventfd.h>
|
||||||
|
|
||||||
#include <a8/a8.h>
|
#include <a8/a8.h>
|
||||||
@ -18,8 +21,7 @@ namespace a8
|
|||||||
|
|
||||||
EventFD::~EventFD()
|
EventFD::~EventFD()
|
||||||
{
|
{
|
||||||
::close(fd_);
|
UnInit();
|
||||||
fd_ = a8::INVALID_FD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventFD::Init(void* context)
|
void EventFD::Init(void* context)
|
||||||
@ -27,13 +29,30 @@ namespace a8
|
|||||||
context_ = context;
|
context_ = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventFD::UnInit()
|
||||||
|
{
|
||||||
|
if (fd_ != a8::INVALID_FD) {
|
||||||
|
struct epoll_event ev;
|
||||||
|
::epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, fd_, &ev);
|
||||||
|
::close(fd_);
|
||||||
|
fd_ = a8::INVALID_FD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EventFD::Write(unsigned long long value)
|
void EventFD::Write(unsigned long long value)
|
||||||
{
|
{
|
||||||
eventfd_write(fd_, value);
|
::eventfd_write(fd_, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventFD::SetEpollFd(int epoll_fd)
|
void EventFD::SetEpollFd(int epoll_fd)
|
||||||
{
|
{
|
||||||
|
struct epoll_event ev;
|
||||||
|
ev.data.fd = fd_;
|
||||||
|
ev.events = EPOLLIN | EPOLLET;
|
||||||
|
int ret = ::epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd_, &ev);
|
||||||
|
if (ret != 0) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
epoll_fd_ = epoll_fd;
|
epoll_fd_ = epoll_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ namespace a8
|
|||||||
virtual ~EventFD();
|
virtual ~EventFD();
|
||||||
|
|
||||||
void Init(void* context);
|
void Init(void* context);
|
||||||
|
void UnInit();
|
||||||
void Write(unsigned long long value);
|
void Write(unsigned long long value);
|
||||||
virtual void SetEpollFd(int epoll_fd) override;
|
virtual void SetEpollFd(int epoll_fd) override;
|
||||||
virtual void DoRecv() override;
|
virtual void DoRecv() override;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <sys/epoll.h>
|
||||||
#include <sys/timerfd.h>
|
#include <sys/timerfd.h>
|
||||||
|
|
||||||
#include <a8/a8.h>
|
#include <a8/a8.h>
|
||||||
@ -18,8 +19,7 @@ namespace a8
|
|||||||
|
|
||||||
TimerFD::~TimerFD()
|
TimerFD::~TimerFD()
|
||||||
{
|
{
|
||||||
::close(fd_);
|
UnInit();
|
||||||
fd_ = a8::INVALID_FD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TimerFD::Init(void* context)
|
void TimerFD::Init(void* context)
|
||||||
@ -27,6 +27,16 @@ namespace a8
|
|||||||
context_ = context;
|
context_ = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TimerFD::UnInit()
|
||||||
|
{
|
||||||
|
if (fd_ != a8::INVALID_FD) {
|
||||||
|
struct epoll_event ev;
|
||||||
|
::epoll_ctl(epoll_fd_, EPOLL_CTL_DEL, fd_, &ev);
|
||||||
|
::close(fd_);
|
||||||
|
fd_ = a8::INVALID_FD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TimerFD::Start(long long ms)
|
void TimerFD::Start(long long ms)
|
||||||
{
|
{
|
||||||
itimerspec new_value;
|
itimerspec new_value;
|
||||||
@ -59,6 +69,13 @@ namespace a8
|
|||||||
|
|
||||||
void TimerFD::SetEpollFd(int epoll_fd)
|
void TimerFD::SetEpollFd(int epoll_fd)
|
||||||
{
|
{
|
||||||
|
struct epoll_event ev;
|
||||||
|
ev.data.fd = fd_;
|
||||||
|
ev.events = EPOLLIN | EPOLLET;
|
||||||
|
int ret = ::epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd_, &ev);
|
||||||
|
if (ret != 0) {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
epoll_fd_ = epoll_fd;
|
epoll_fd_ = epoll_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ namespace a8
|
|||||||
virtual ~TimerFD();
|
virtual ~TimerFD();
|
||||||
|
|
||||||
void Init(void* context);
|
void Init(void* context);
|
||||||
|
void UnInit();
|
||||||
void Start(long long ms);
|
void Start(long long ms);
|
||||||
void Stop();
|
void Stop();
|
||||||
virtual void SetEpollFd(int epoll_fd) override;
|
virtual void SetEpollFd(int epoll_fd) override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user