Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ACE_QTREACTOR_H
00015 #define ACE_QTREACTOR_H
00016
00017 #include "ace/pre.h"
00018
00019 #include "ace/QtReactor/ACE_QtReactor_export.h"
00020
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif
00024
00025 #include "ace/Select_Reactor.h"
00026 #include "ace/Map_Manager.h"
00027
00028 #if defined (ACE_HAS_QT4)
00029 # include "Qt/qglobal.h"
00030 #else
00031 # include "qglobal.h"
00032 #endif
00033
00034
00035 #if QT_VERSION < 0x040000
00036 #include <qapplication.h>
00037 #include <qobject.h>
00038 #include <qsocketnotifier.h>
00039 #include <qtimer.h>
00040 #else
00041 #include <QtGui/QApplication>
00042 #include <QtCore/QObject>
00043 #include <QtCore/QSocketNotifier>
00044 #include <QtCore/QTimer>
00045 #endif
00046
00047 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097 class ACE_QtReactor_Export ACE_QtReactor
00098 : public QObject,
00099 public ACE_Select_Reactor
00100 {
00101
00102 Q_OBJECT
00103
00104 public:
00105
00106
00107
00108 ACE_QtReactor (QApplication *qapp = 0,
00109 ACE_Sig_Handler * = 0,
00110 ACE_Timer_Queue * = 0,
00111 int disable_notify_pipe = 0,
00112 ACE_Reactor_Notify *notify = 0,
00113 bool mask_signals = true,
00114 int s_queue = ACE_SELECT_TOKEN::FIFO);
00115
00116
00117
00118
00119 ACE_QtReactor (size_t size,
00120 QApplication *qapp = 0,
00121 bool restart = false,
00122 ACE_Sig_Handler * = 0,
00123 ACE_Timer_Queue * = 0,
00124 int disable_notify_pipe = 0,
00125 ACE_Reactor_Notify *notify = 0,
00126 bool mask_signals = true,
00127 int s_queue = ACE_SELECT_TOKEN::FIFO);
00128
00129 virtual ~ACE_QtReactor (void);
00130
00131 void qapplication (QApplication *qapp);
00132
00133
00134 virtual long schedule_timer (ACE_Event_Handler *handler,
00135 const void *arg,
00136 const ACE_Time_Value &delay_time,
00137 const ACE_Time_Value &interval);
00138
00139 virtual int cancel_timer (ACE_Event_Handler *handler,
00140 int dont_call_handle_close = 1);
00141
00142 virtual int cancel_timer (long timer_id,
00143 const void **arg = 0,
00144 int dont_call_handle_close = 1);
00145
00146 protected:
00147
00148
00149
00150
00151 virtual int register_handler_i (ACE_HANDLE handle,
00152 ACE_Event_Handler *handler,
00153 ACE_Reactor_Mask mask);
00154
00155
00156 virtual int register_handler_i (const ACE_Handle_Set &handles,
00157 ACE_Event_Handler *handler,
00158 ACE_Reactor_Mask mask);
00159
00160
00161
00162 virtual int remove_handler_i (ACE_HANDLE handle,
00163 ACE_Reactor_Mask mask);
00164
00165
00166 virtual int remove_handler_i (const ACE_Handle_Set &handles,
00167 ACE_Reactor_Mask mask);
00168
00169
00170 virtual int wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_set,
00171 ACE_Time_Value *max_wait_time);
00172
00173 virtual int QtWaitForMultipleEvents (int width,
00174 ACE_Select_Reactor_Handle_Set &wait_set,
00175 ACE_Time_Value *max_wait_time);
00176
00177 virtual int bit_ops (ACE_HANDLE handle,
00178 ACE_Reactor_Mask mask,
00179 ACE_Select_Reactor_Handle_Set &handle_set,
00180 int ops);
00181
00182 int set_enable_flag_by_mask (int flag_value, ACE_HANDLE handle, ACE_Reactor_Mask mask);
00183 void create_notifiers_for_handle (ACE_HANDLE handle);
00184 void destroy_notifiers_for_handle (ACE_HANDLE handle);
00185
00186
00187
00188
00189 QApplication *qapp_ ;
00190
00191
00192 typedef ACE_Map_Manager<ACE_HANDLE, QSocketNotifier *, ACE_Null_Mutex> MAP;
00193
00194
00195 MAP read_notifier_;
00196
00197
00198 MAP write_notifier_;
00199
00200
00201 MAP exception_notifier_;
00202
00203
00204 QTimer *qtime_ ;
00205
00206 private:
00207
00208
00209 void reset_timeout (void);
00210
00211 void reopen_notification_pipe(void);
00212
00213 ACE_QtReactor (const ACE_QtReactor &);
00214 ACE_QtReactor &operator= (const ACE_QtReactor &);
00215
00216 private slots:
00217
00218
00219
00220 void read_event (int FD);
00221
00222
00223 void write_event (int FD);
00224
00225
00226 void exception_event (int FD);
00227
00228
00229 void timeout_event (void);
00230 };
00231
00232 ACE_END_VERSIONED_NAMESPACE_DECL
00233
00234 #include "ace/post.h"
00235 #endif