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 #ifndef MUDUO_NET_EVENTLOOP_H 9 #define MUDUO_NET_EVENTLOOP_H 10 11 #include "thread/Thread.h" 12 13+#include <boost/scoped_ptr.hpp> 14+#include <vector> 15+ 16 namespace muduo 17 { 18 19+class Channel; 20+class Poller; 21+ 22 class EventLoop : boost::noncopyable 23 { 24 public: 25 26 EventLoop(); 27+ 28+ // force out-line dtor, for scoped_ptr members. 29 ~EventLoop(); 30 31+ /// 32+ /// Loops forever. 33+ /// 34+ /// Must be called in the same thread as creation of the object. 35+ /// 36 void loop(); 37 38+ void quit(); 39+ 40+ // internal use only 41+ void updateChannel(Channel* channel); 42+ // void removeChannel(Channel* channel); 43+ 44 void assertInLoopThread() 45 { 46 if (!isInLoopThread()) 47 { 48 abortNotInLoopThread(); 49 } 50 } 51 52 bool isInLoopThread() const { return threadId_ == CurrentThread::tid(); } 53 54 private: 55 56 void abortNotInLoopThread(); 57 58+ typedef std::vector<Channel*> ChannelList; 59+ 60 bool looping_; /* atomic */ 61+ bool quit_; /* atomic */ 62 const pid_t threadId_; 63+ boost::scoped_ptr<Poller> poller_; 64+ ChannelList activeChannels_; 65 }; 66 67 } 68 69 #endif // MUDUO_NET_EVENTLOOP_H 70