1 // excerpts from http://code.google.com/p/muduo/
2 //
3 // Use of this source code is governed by a BSD-style license
4 // that can be found in the License file.
5 //
6 // Author: Shuo Chen (chenshuo at chenshuo dot com)
7 
8 #include "EventLoop.h"
9 
10+#include "Channel.h"
11+#include "Poller.h"
12+
13 #include "logging/Logging.h"
14 
15 #include <assert.h>
16 
17 using namespace muduo;
18 
19 __thread EventLoop* t_loopInThisThread = 0;
20+const int kPollTimeMs = 10000;
21 
22 EventLoop::EventLoop()
23   : looping_(false),
24+    quit_(false),
25     threadId_(CurrentThread::tid()),
26+    poller_(new Poller(this))
27 {
28   LOG_TRACE << "EventLoop created " << this << " in thread " << threadId_;
29   if (t_loopInThisThread)
30   {
31     LOG_FATAL << "Another EventLoop " << t_loopInThisThread
32               << " exists in this thread " << threadId_;
33   }
34   else
35   {
36     t_loopInThisThread = this;
37   }
38 }
39 
40 EventLoop::~EventLoop()
41 {
42   assert(!looping_);
43   t_loopInThisThread = NULL;
44 }
45 
46 void EventLoop::loop()
47 {
48   assert(!looping_);
49   assertInLoopThread();
50   looping_ = true;
51+  quit_ = false;
52 
53+  while (!quit_)
54+  {
55+    activeChannels_.clear();
56+    poller_->poll(kPollTimeMs, &activeChannels_);
57+    for (ChannelList::iterator it = activeChannels_.begin();
58+        it != activeChannels_.end(); ++it)
59+    {
60+      (*it)->handleEvent();
61+    }
62+  }
63 
64   LOG_TRACE << "EventLoop " << this << " stop looping";
65   looping_ = false;
66 }
67 
68+void EventLoop::quit()
69+{
70+  quit_ = true;
71+  // wakeup();
72+}
73+
74+void EventLoop::updateChannel(Channel* channel)
75+{
76+  assert(channel->ownerLoop() == this);
77+  assertInLoopThread();
78+  poller_->updateChannel(channel);
79+}
80+
81 void EventLoop::abortNotInLoopThread()
82 {
83   LOG_FATAL << "EventLoop::abortNotInLoopThread - EventLoop " << this
84             << " was created in threadId_ = " << threadId_
85             << ", current thread id = " <<  CurrentThread::tid();
86 }
87 
88