00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ACE_QTREACTOR_H
00015 #define ACE_QTREACTOR_H
00016 #include "ace/pre.h"
00017
00018 #include "ace/config-all.h"
00019
00020 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00021 # pragma once
00022 #endif
00023
00024 #if defined (ACE_HAS_QT)
00025
00026 #include "ace/Select_Reactor.h"
00027 #include "ace/Map_Manager.h"
00028
00029
00030 #include <qapplication.h>
00031 #include <qobject.h>
00032 #include <qsocketnotifier.h>
00033 #include <qtimer.h>
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 class ACE_Export ACE_QtReactor : public QObject, public ACE_Select_Reactor
00047 {
00048
00049 Q_OBJECT
00050
00051 public:
00052
00053 ACE_QtReactor (QApplication *qapp = NULL,
00054 size_t size = DEFAULT_SIZE,
00055 int restart = 0,
00056 ACE_Sig_Handler *handler = 0);
00057
00058 virtual ~ACE_QtReactor (void);
00059
00060 void qapplication (QApplication *qapp);
00061
00062
00063 virtual long schedule_timer (ACE_Event_Handler *event_handler,
00064 const void *arg,
00065 const ACE_Time_Value &delay,
00066 const ACE_Time_Value &interval);
00067
00068 virtual int cancel_timer (ACE_Event_Handler *handler,
00069 int dont_call_handle_close = 1);
00070
00071 virtual int cancel_timer (long timer_id,
00072 const void **arg = 0,
00073 int dont_call_handle_close = 1);
00074
00075 protected:
00076
00077
00078
00079
00080 virtual int register_handler_i (ACE_HANDLE handle,
00081 ACE_Event_Handler *handler,
00082 ACE_Reactor_Mask mask);
00083
00084
00085 virtual int register_handler_i (const ACE_Handle_Set &handles,
00086 ACE_Event_Handler *handler,
00087 ACE_Reactor_Mask mask);
00088
00089
00090
00091 virtual int remove_handler_i (ACE_HANDLE handle,
00092 ACE_Reactor_Mask mask);
00093
00094
00095 virtual int remove_handler_i (const ACE_Handle_Set &handles,
00096 ACE_Reactor_Mask mask);
00097
00098
00099 virtual int wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_set,
00100 ACE_Time_Value *max_wait_time);
00101
00102 virtual int QtWaitForMultipleEvents (int width,
00103 ACE_Select_Reactor_Handle_Set &wait_set,
00104 ACE_Time_Value *max_wait_time);
00105
00106
00107
00108
00109 QApplication *qapp_ ;
00110
00111
00112 typedef ACE_Map_Manager<ACE_HANDLE, QSocketNotifier *, ACE_Null_Mutex> MAP;
00113
00114
00115 MAP read_notifier_;
00116
00117
00118 MAP write_notifier_;
00119
00120
00121 MAP exception_notifier_;
00122
00123
00124 QTimer *qtime_ ;
00125
00126 private:
00127
00128
00129 void reset_timeout (void);
00130
00131
00132 ACE_QtReactor (const ACE_QtReactor &);
00133 ACE_QtReactor &operator= (const ACE_QtReactor &);
00134
00135 private slots:
00136
00137
00138
00139 void read_event (int FD);
00140
00141
00142 void write_event (int FD);
00143
00144
00145 void exception_event (int FD);
00146
00147
00148 void timeout_event (void);
00149 };
00150
00151 #endif
00152
00153 #include "ace/post.h"
00154 #endif