-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathevent_loop.cpp
More file actions
51 lines (47 loc) · 1.1 KB
/
event_loop.cpp
File metadata and controls
51 lines (47 loc) · 1.1 KB
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
#include "event_loop.h"
#include "channel.h"
#include "timerfd/time_stamp.h"
#include <pthread.h>
namespace net {
bool EventLoop::isInLoopThread()
{
return threadId_ == Thread::getCurrentThreadID();
}
void EventLoop::startLoop()
{
assert(isInLoopThread());
isLooping_ = true;
while (isLooping_) {
if (!activeChannels_.empty())
activeChannels_.clear();
TimeStamp time = poller_->Poll(kTimeOut, activeChannels_);
//time.printTime();
//处理socket上发生的事件
handleEvent();
doTaskInQueue();
}
}
void EventLoop::addNewChannel(Channel* channel)
{
assert(channel != NULL);
poller_->addNewChannel(channel);
}
void EventLoop::handleEvent()
{
if (activeChannels_.empty())
return;
for (auto i : activeChannels_) {
i->handleEvent();
}
}
void EventLoop::removeChannel(Channel* channel)
{
assert(channel != NULL);
poller_->removeChannel(channel);
}
void EventLoop::updateChannel(Channel* channel)
{
assert(this == channel->getOwnLoop());
poller_->updateChannel(channel);
}
} //namespace net