⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventloop.h

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 H
字号:
#ifndef _EVENTLOOP_H#define _EVENTLOOP_H//// The contents of this file are subject to the Mozilla Public// License Version 1.1 (the "License"); you may not use this file// except in compliance with the License. You may obtain a copy// of the License at http://www.mozilla.org/MPL/// // Software distributed under the License is distributed on an// "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or// implied. See the License for the specific language governing// rights and limitations under the License.// // The Original Code is State Machine Compiler (SMC).// // The Initial Developer of the Original Code is Charles W. Rapp.// Portions created by Charles W. Rapp are// Copyright (C) 2000 - 2007. Charles W. Rapp.// All Rights Reserved.// // Contributor(s): //// Name//	Eventloop.h//// Description//  Encapsulates the select-based event loop and timer table.//// RCS ID// $Id: Eventloop.h,v 1.5 2007/12/28 12:34:40 cwrapp Exp $//// CHANGE LOG// $Log: Eventloop.h,v $// Revision 1.5  2007/12/28 12:34:40  cwrapp// Version 5.0.1 check-in.//// Revision 1.4  2005/05/28 13:31:18  cwrapp// Updated C++ examples.//// Revision 1.0  2003/12/14 19:35:56  charlesr// Initial revision//#include "InputListener.h"#include "TimerListener.h"#include <sys/types.h>#if defined(WIN32)#include <sys/timeb.h>#include <winsock2.h>#else#include <sys/time.h>#endifclass Eventloop{// Member functions.public:    Eventloop();    ~Eventloop();    // Enter the event loop and continue running until told to    // stop. If the event loop terminated normally, 0 is    // returned; otherwise a return value greater than 0 is    // returned.    int start();    // Stop the event loop.    void stop();    // Methods for adding and removing file descriptors.    void addFD(int fd, InputListener& listener);    void removeFD(int fd);    // Methods for starting and stopping timers.    void startTimer(const char *name,                    long duration,                    TimerListener& listener);    void stopTimer(const char *name, const TimerListener& listener);    bool doesTimerExist(const char *name) const;protected:private:    void gettime(timeval& timeval) const;// Inner classes.    class Timer    {    // Member functions.    public:                Timer(const char *name,              long duration,              const timeval& expiration,              TimerListener& listener);        ~Timer();        int operator<(const timeval& time);        int operator<=(const timeval& time);        int operator==(const timeval& time);        int operator>=(const timeval& time);        int operator>(const timeval& time);        const char* getName() const;        long getDuration() const;        void setDuration(long duration);        const timeval& getExpiration() const;        void setExpiration(const timeval& expiration);        TimerListener& getListener() const;        Timer* getNext() const;        void setNext(Timer *timer);    // Member data.    private:        char *_name;        // Duration is in milliseconds.        long _duration;        // When the timer is expected to expire.        timeval _expiration;        // The TcpConnection receiving this callback.        TimerListener& _listener;        Timer *_next;    // Friends.        friend class Eventloop;    };// Member data.public:protected:private:    // Set to true while event loop is running and false when    // event loop is to stop.    int _continueRunning;    // The file descriptors to watch.    fd_set _fdSet;    // Keep track of the maximum file descriptor.    int _maxFD;    // Keep track of the number of file descriptors being    // watched.    int _fdCount;    // The TCP connection associated with each file descriptor.    InputListener **_fdTable;    // This table is sorted by expiration time - from earliest    // to latest.    Timer *_timerTable;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -