#include <QtReactor.h>
Inheritance diagram for ACE_QtReactor:


Public Member Functions | |
| ACE_QtReactor (QApplication *qapp=0, ACE_Sig_Handler *=0, ACE_Timer_Queue *=0, int disable_notify_pipe=0, ACE_Reactor_Notify *notify=0, int mask_signals=1, int s_queue=ACE_SELECT_TOKEN::FIFO) | |
| Constructor follows . | |
| ACE_QtReactor (size_t size, QApplication *qapp=0, int restart=0, ACE_Sig_Handler *=0, ACE_Timer_Queue *=0, int disable_notify_pipe=0, ACE_Reactor_Notify *notify=0, int mask_signals=1, int s_queue=ACE_SELECT_TOKEN::FIFO) | |
| Constructor follows . | |
| virtual | ~ACE_QtReactor (void) |
| void | qapplication (QApplication *qapp) |
| virtual long | schedule_timer (ACE_Event_Handler *handler, const void *arg, const ACE_Time_Value &delay_time, const ACE_Time_Value &interval) |
| virtual int | cancel_timer (ACE_Event_Handler *handler, int dont_call_handle_close=1) |
| virtual int | cancel_timer (long timer_id, const void **arg=0, int dont_call_handle_close=1) |
Protected Types | |
| typedef ACE_Map_Manager< ACE_HANDLE, QSocketNotifier *, ACE_Null_Mutex > | MAP |
| Typedef of a map. | |
Protected Member Functions | |
| virtual int | register_handler_i (ACE_HANDLE handle, ACE_Event_Handler *handler, ACE_Reactor_Mask mask) |
| Register a single . | |
| virtual int | register_handler_i (const ACE_Handle_Set &handles, ACE_Event_Handler *handler, ACE_Reactor_Mask mask) |
| Register a set of with Qt. | |
| virtual int | remove_handler_i (ACE_HANDLE handle, ACE_Reactor_Mask mask) |
| Remove the associated with this . | |
| virtual int | remove_handler_i (const ACE_Handle_Set &handles, ACE_Reactor_Mask mask) |
| Remove a set of . | |
| virtual int | wait_for_multiple_events (ACE_Select_Reactor_Handle_Set &handle_set, ACE_Time_Value *max_wait_time) |
| Wait for events to occur. | |
| virtual int | QtWaitForMultipleEvents (int width, ACE_Select_Reactor_Handle_Set &wait_set, ACE_Time_Value *max_wait_time) |
| virtual int | bit_ops (ACE_HANDLE handle, ACE_Reactor_Mask mask, ACE_Select_Reactor_Handle_Set &handle_set, int ops) |
| Allow manipulation of the mask and mask. | |
| int | set_enable_flag_by_mask (int flag_value, ACE_HANDLE handle, ACE_Reactor_Mask mask) |
| void | create_notifiers_for_handle (ACE_HANDLE handle) |
| void | destroy_notifiers_for_handle (ACE_HANDLE handle) |
Protected Attributes | |
| QApplication * | qapp_ |
| Some Qt stuff that we need to have. | |
| MAP | read_notifier_ |
| A notifier for a read. | |
| MAP | write_notifier_ |
| A write notifier. | |
| MAP | exception_notifier_ |
| An exception notifier. | |
| QTimer * | qtime_ |
| The timer class that would provide timer-sgnals & single-shot timers. | |
Private Slots | |
| void | read_event (int FD) |
| Dispatch a Read Event. | |
| void | write_event (int FD) |
| Dispatch a Write Event. | |
| void | exception_event (int FD) |
| Dispatch an exception event. | |
| void | timeout_event (void) |
| Dispach a timeout event. | |
Private Member Functions | |
| void | reset_timeout (void) |
| void | reopen_notification_pipe (void) |
| reopens notification pipe to create SocketNotifier for it | |
| ACE_QtReactor (const ACE_QtReactor &) | |
| Deny access since member-wise won't work... | |
| ACE_QtReactor & | operator= (const ACE_QtReactor &) |
Definition at line 84 of file QtReactor.h.
|
|
Typedef of a map.
Definition at line 179 of file QtReactor.h. |
|
||||||||||||||||||||||||||||||||
|
Constructor follows .
Definition at line 11 of file QtReactor.cpp. References ACE_Select_Reactor, ACE_Timer_Queue, and reopen_notification_pipe().
00017 : 00018 ACE_Select_Reactor( sh, tq, disable_notify_pipe, 00019 notify, mask_signals, s_queue), 00020 qapp_(qapp), 00021 qtime_ (0) 00022 { 00023 reopen_notification_pipe(); 00024 } |
|
||||||||||||||||||||||||||||||||||||||||
|
Constructor follows .
Definition at line 27 of file QtReactor.cpp. References ACE_Select_Reactor, ACE_Timer_Queue, and reopen_notification_pipe().
00035 : 00036 ACE_Select_Reactor( size, restart, sh, tq, 00037 disable_notify_pipe, notify, mask_signals, 00038 s_queue ), 00039 qapp_(qapp), 00040 qtime_ (0) 00041 00042 { 00043 reopen_notification_pipe(); 00044 } |
|
|
Definition at line 73 of file QtReactor.cpp. References ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::begin(), ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::end(), exception_notifier_, qtime_, read_notifier_, and write_notifier_.
00074 {
00075 // iterate over QSocketNotifiers for read and release them
00076 MAP::ITERATOR iter = this->read_notifier_.begin ();
00077 MAP::ITERATOR iterEnd = this->read_notifier_.end ();
00078 while( iter != iterEnd )
00079 {
00080 MAP::ENTRY &entry = *iter;
00081 // QOBject destructor notifies qapplication (hopefully) on delete
00082 delete entry.int_id_;
00083 ++iter;
00084 }
00085
00086 // iterate over QSocketNotifiers for write and release them
00087 this->write_notifier_.begin ();
00088 this->write_notifier_.end ();
00089 while( iter != iterEnd )
00090 {
00091 MAP::ENTRY &entry = *iter;
00092 // QOBject destructor notifies qapplication (hopefully) on delete
00093 delete entry.int_id_;
00094 ++iter;
00095 }
00096
00097 // iterate over QSocketNotifiers for exceptions and release them
00098 this->exception_notifier_.begin ();
00099 this->exception_notifier_.end ();
00100 while( iter != iterEnd )
00101 {
00102 MAP::ENTRY &entry = *iter;
00103 // QOBject destructor notifies qapplication (hopefully) on delete
00104 delete entry.int_id_;
00105 ++iter;
00106 }
00107
00108 // QOBject destructor notifies qapplication (hopefully) on delete
00109 delete qtime_;
00110 }
|
|
|
Deny access since member-wise won't work...
|
|
||||||||||||||||||||
|
Allow manipulation of the mask and mask.
Reimplemented from ACE_Select_Reactor_Impl. Definition at line 262 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_Select_Reactor_Impl::bit_ops(), and set_enable_flag_by_mask().
00266 {
00267 int result;
00268 ACE_Select_Reactor_Handle_Set preserved_handle_set = handle_set;
00269
00270 // Call regular bit_ops
00271 if ((result = ACE_Select_Reactor::bit_ops (handle, mask, handle_set, ops)) == -1)
00272 return -1;
00273
00274 // disable or enable the notifiers based on handle_set and mask
00275 int enableFlag = -1;
00276 if (&handle_set == &this->suspend_set_)
00277 enableFlag = 0;
00278 else if (&handle_set == &this->wait_set_)
00279 enableFlag = 1;
00280 else
00281 // We have no work to do here, so just return
00282 return result;
00283
00284 switch (ops)
00285 {
00286 case ACE_Reactor::SET_MASK:
00287 case ACE_Reactor::ADD_MASK:
00288 // Enable or disable notifiers based on the specified masks
00289 if (this->set_enable_flag_by_mask (enableFlag, handle, mask) == -1)
00290 {
00291 // We can't just return -1 here because we'll have half-changed things.
00292 // So, we need to restore the old handle_set, then return -1.
00293 handle_set = preserved_handle_set;
00294 return -1;
00295 }
00296 break;
00297
00298 case ACE_Reactor::CLR_MASK:
00299 if (this->set_enable_flag_by_mask (!enableFlag, handle, mask) == -1)
00300 {
00301 handle_set = preserved_handle_set;
00302 return -1;
00303 }
00304 break;
00305
00306 default:
00307 // we take no action for any other operations
00308 break;
00309 }
00310
00311 return result;
00312 }
|
|
||||||||||||||||
|
Cancel the single ACE_Event_Handler that matches the value (which was returned from the method). If arg is non-NULL then it will be set to point to the ``magic cookie'' argument passed in when the was registered. This makes it possible to free up the memory and avoid memory leaks. If is 0 then the method of will be invoked. Returns 1 if cancellation succeeded and 0 if the wasn't found. Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 545 of file QtReactor.cpp. References ACE_TRACE, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::cancel_timer(), and reset_timeout().
00548 {
00549 ACE_TRACE ("ACE_QtReactor::cancel_timer") ;
00550
00551 if (ACE_Select_Reactor::cancel_timer (timer_id,
00552 arg,
00553 dont_call_handle_close ) == -1 )
00554 return -1 ;
00555 else
00556 {
00557 this->reset_timeout( ) ;
00558 return 0 ;
00559 }
00560 }
|
|
||||||||||||
|
Cancel all that match the address of . If is 0 then the method of will be invoked. Returns number of handler's cancelled. Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 530 of file QtReactor.cpp. References ACE_TRACE, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::cancel_timer(), and reset_timeout().
00532 {
00533 ACE_TRACE ("ACE_QtReactor::cancel_timer");
00534
00535 if (ACE_Select_Reactor::cancel_timer (handler,
00536 dont_call_handle_close ) == -1 )
00537 return -1 ;
00538 else
00539 {
00540 this->reset_timeout( ) ;
00541 return 0 ;
00542 }
00543 }
|
|
|
Definition at line 315 of file QtReactor.cpp. References ACE_NEW, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::bind(), exception_event(), exception_notifier_, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), read_event(), read_notifier_, write_event(), and write_notifier_. Referenced by register_handler_i().
00316 {
00317 QSocketNotifier *qsock_notifier = 0;
00318
00319 // if there is already a read socket notifier for this handle, do nothing
00320 // otherwise create read notifier
00321 if ( ( this->read_notifier_.find (handle,
00322 qsock_notifier) == -1) )
00323 {
00324 ACE_NEW (qsock_notifier,
00325 QSocketNotifier (int(handle), QSocketNotifier::Read, this));
00326 this->read_notifier_.bind (handle,
00327 qsock_notifier);
00328 QObject::connect (qsock_notifier,
00329 SIGNAL (activated (int)),
00330 this,
00331 SLOT (read_event (int))) ;
00332 // disable; it will be enabled by the regular register_handler_i if
00333 // necessary
00334 qsock_notifier->setEnabled (0);
00335 }
00336
00337 qsock_notifier = 0;
00338
00339
00340 // if there is already a write socket notifier for this handle, do nothing
00341 // otherwise create read notifier
00342 if ((this->write_notifier_.find (handle,
00343 qsock_notifier) == -1))
00344 {
00345 ACE_NEW (qsock_notifier,
00346 QSocketNotifier (int(handle), QSocketNotifier::Write, this));
00347
00348 this->write_notifier_.bind (handle,
00349 qsock_notifier);
00350
00351 QObject::connect (qsock_notifier,
00352 SIGNAL (activated (int)),
00353 this,
00354 SLOT (write_event (int)));
00355 // disable; it will be enabled by the regular register_handler_i if
00356 // necessary
00357 qsock_notifier->setEnabled (0);
00358 }
00359
00360
00361 qsock_notifier = 0;
00362
00363 // if there is already a write socket notifier for this handle, do nothing
00364 // otherwise create read notifier
00365 if ((this->exception_notifier_.find (handle,
00366 qsock_notifier) == -1))
00367 {
00368
00369 ACE_NEW (qsock_notifier,
00370 QSocketNotifier (int(handle), QSocketNotifier::Exception, this));
00371
00372 this->exception_notifier_.bind (handle,
00373 qsock_notifier);
00374
00375 QObject::connect (qsock_notifier,
00376 SIGNAL (activated (int)),
00377 this,
00378 SLOT (exception_event (int))) ;
00379 // disable; it will be enabled by the regular register_handler_i if
00380 // necessary
00381 qsock_notifier->setEnabled (0);
00382 }
00383 }
|
|
|
Definition at line 386 of file QtReactor.cpp. References exception_notifier_, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), read_notifier_, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::unbind(), and write_notifier_. Referenced by register_handler_i(), and remove_handler_i().
00387 {
00388 QSocketNotifier *qsock_notifier = 0;
00389
00390 // Looks for the handle in the maps and removes them.
00391
00392 if ((this->read_notifier_.find (handle,
00393 qsock_notifier) != -1))
00394 {
00395 this->read_notifier_.unbind (handle,
00396 qsock_notifier);
00397 delete qsock_notifier;
00398 }
00399
00400 if ((this->write_notifier_.find (handle,
00401 qsock_notifier) != -1))
00402 {
00403 this->write_notifier_.unbind (handle,
00404 qsock_notifier);
00405 delete qsock_notifier;
00406 }
00407
00408
00409 if ((this->exception_notifier_.find (handle,
00410 qsock_notifier) != -1))
00411 {
00412 this->exception_notifier_.unbind (handle,
00413 qsock_notifier);
00414 delete qsock_notifier;
00415 }
00416 }
|
|
|
Dispatch an exception event.
Definition at line 190 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_TRACE, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::dispatch(), ACE_Select_Reactor_Handle_Set::ex_mask_, exception_notifier_, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::mask_ops(), ACE_Handle_Set::set_bit(), and set_enable_flag_by_mask(). Referenced by create_notifiers_for_handle().
00191 {
00192 ACE_TRACE ("ACE_QtReactor::exception_event");
00193
00194 ACE_HANDLE handle = ACE_HANDLE( p_handle );
00195
00196
00197 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00198 // disable socket notifier to clear pending events
00199 QSocketNotifier *qsock_notifier = 0;
00200 if ( ( this->exception_notifier_.find( handle, qsock_notifier) != -1) )
00201 qsock_notifier->setEnabled( false );
00202 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00203
00204 // The core of exception event handling
00205 ACE_Select_Reactor_Handle_Set dispatch_set;
00206
00207 dispatch_set.ex_mask_.set_bit( handle );
00208 dispatch (1, dispatch_set);
00209
00210 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00211 // enable socket notifier according to current mask
00212 ACE_Reactor_Mask mask = 0;
00213 mask = mask_ops( handle, mask, ACE_Reactor::GET_MASK );
00214 if ( -1 != mask )
00215 set_enable_flag_by_mask ( 1, handle, mask);
00216 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00217 }
|
|
|
|
|
|
Definition at line 113 of file QtReactor.cpp. References qapp_.
00114 {
00115 // reparent QSocketNotifiers and QTimer
00116 qapp_ = qapp ;
00117 }
|
|
||||||||||||||||
|
Definition at line 564 of file QtReactor.cpp. References ACE_Select_Reactor_Handle_Set::ex_mask_, ACE_Select_Reactor_Handler_Repository::max_handlep1(), qapp_, ACE_Select_Reactor_Handle_Set::rd_mask_, ACE_OS::select(), and ACE_Select_Reactor_Handle_Set::wr_mask_. Referenced by wait_for_multiple_events().
00567 {
00568 // Check to make sure our handle's are all usable.
00569 ACE_Select_Reactor_Handle_Set temp_set = wait_set;
00570
00571 if (ACE_OS::select (width,
00572 temp_set.rd_mask_,
00573 temp_set.wr_mask_,
00574 temp_set.ex_mask_,
00575 (ACE_Time_Value *) &ACE_Time_Value::zero ) == -1)
00576 return -1; // Bad file arguments...
00577
00578 // Qt processing.
00579 this->qapp_->processOneEvent ();
00580
00581 // Reset the width, in case it changed during the upcalls.
00582 width = handler_rep_.max_handlep1 ();
00583
00584 // Now actually read the result needed by the <Select_Reactor> using
00585 // <select>.
00586 return ACE_OS::select(width,
00587 wait_set.rd_mask_,
00588 wait_set.wr_mask_,
00589 wait_set.ex_mask_,
00590 (ACE_Time_Value *) &ACE_Time_Value::zero);
00591 }
|
|
|
Dispatch a Read Event.
Definition at line 131 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_TRACE, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::dispatch(), ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::mask_ops(), ACE_Select_Reactor_Handle_Set::rd_mask_, read_notifier_, ACE_Handle_Set::set_bit(), and set_enable_flag_by_mask(). Referenced by create_notifiers_for_handle().
00132 {
00133 ACE_TRACE ("ACE_QtReactor::read_event");
00134
00135 ACE_HANDLE handle = ACE_HANDLE( p_handle );
00136
00137 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00138 // disable socket notifier to clear pending events
00139 QSocketNotifier *qsock_notifier = 0;
00140 if ( ( this->read_notifier_.find( handle,
00141 qsock_notifier) != -1) )
00142 qsock_notifier->setEnabled( false );
00143 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00144
00145 // The core of read event handling
00146 ACE_Select_Reactor_Handle_Set dispatch_set;
00147
00148 dispatch_set.rd_mask_.set_bit ( handle );
00149 this->dispatch (1, dispatch_set);
00150
00151 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00152 // enable socket notifier according to current mask
00153 ACE_Reactor_Mask mask = 0;
00154 mask = mask_ops( handle, mask, ACE_Reactor::GET_MASK );
00155 if ( -1 != mask )
00156 set_enable_flag_by_mask ( 1, handle, mask);
00157 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00158 }
|
|
||||||||||||||||
|
Register a set of with Qt.
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 443 of file QtReactor.cpp. References ACE_Reactor_Mask, and ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::register_handler_i().
00446 {
00447 return ACE_Select_Reactor::register_handler_i(handles,
00448 handler,
00449 mask);
00450 }
|
|
||||||||||||||||
|
Register a single .
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 419 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_TRACE, create_notifiers_for_handle(), destroy_notifiers_for_handle(), ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::find_handler(), and ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::register_handler_i().
00422 {
00423 ACE_TRACE ("ACE_QtReactor::register_handler_i");
00424
00425 this->create_notifiers_for_handle (handle);
00426
00427 int result;
00428 if ((result = ACE_Select_Reactor::register_handler_i(handle,
00429 handler,
00430 mask ))
00431 == -1)
00432 {
00433 // destroy notifiers only when there is no handler for handle
00434 if ( !ACE_Select_Reactor::find_handler( handle ) )
00435 this->destroy_notifiers_for_handle (handle);
00436 return -1;
00437 }
00438
00439 return 0;
00440 }
|
|
||||||||||||
|
Remove a set of .
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 466 of file QtReactor.cpp. References ACE_Reactor_Mask, and ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::remove_handler_i().
00468 {
00469 return ACE_Select_Reactor::remove_handler_i (handles,
00470 mask);
00471 }
|
|
||||||||||||
|
Remove the associated with this .
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 452 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_TRACE, destroy_notifiers_for_handle(), ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::find_handler(), and ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::remove_handler_i().
00454 {
00455 ACE_TRACE ("ACE_QtReactor::remove_handler_i");
00456
00457 int result = ACE_Select_Reactor::remove_handler_i (handle, mask);
00458 // destroy notifiers only when there is no handler for handle
00459 if ( !ACE_Select_Reactor::find_handler( handle ) )
00460 this->destroy_notifiers_for_handle (handle);
00461 return result;
00462 }
|
|
|
reopens notification pipe to create SocketNotifier for it
Definition at line 46 of file QtReactor.cpp. References ACE_Reactor_Notify::close(), ACE_Reactor_Notify::open(), ACE_Select_Reactor_Handle_Set::rd_mask_, and ACE_Handle_Set::reset(). Referenced by ACE_QtReactor().
00047 {
00048 // When the ACE_Select_Reactor is constructed it creates the notify
00049 // pipe and registers it with the register_handler_i() method. The
00050 // QtReactor overloads this method BUT because the
00051 // register_handler_i occurs when constructing the base class
00052 // ACE_Select_Reactor, the ACE_Select_Reactor register_handler_i()
00053 // is called not the QtReactor register_handler_i(). This means
00054 // that the notify pipe is registered with the ACE_Select_Reactor
00055 // event handling code not the QtReactor and so notfications don't
00056 // work. To get around this we simply close and re-opened the
00057 // notification handler in the constructor of the QtReactor.
00058
00059 #if defined (ACE_MT_SAFE) && (ACE_MT_SAFE != 0)
00060 if ( initialized_ )
00061 {
00062 this->notify_handler_->close ();
00063
00064 // Patch for MS Windows: close and open doesn't clear the read
00065 // fd_set, so reset it manually
00066 this->wait_set_.rd_mask_.reset ();
00067
00068 this->notify_handler_->open (this, 0);
00069 }
00070 #endif /* ACE_MT_SAFE */
00071 }
|
|
|
This method ensures there's an Qt timeout for the first timeout in the Reactor's Timer_Queue. Definition at line 477 of file QtReactor.cpp. References ACE_NEW, ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK >::calculate_timeout(), ACE_Time_Value::msec(), qtime_, and timeout_event(). Referenced by cancel_timer(), schedule_timer(), and timeout_event().
00478 {
00479 if (this->qtime_ != 0)
00480 {
00481 delete this->qtime_;
00482 this->qtime_ = 0;
00483 }
00484
00485 ACE_Time_Value *max_wait_time =
00486 this->timer_queue_->calculate_timeout (0) ;
00487
00488 if (max_wait_time)
00489 {
00490 ACE_NEW (this->qtime_,
00491 QTimer);
00492
00493 QObject::connect (qtime_,
00494 SIGNAL (timeout ()),
00495 this,
00496 SLOT (timeout_event ()));
00497
00498 qtime_->start(max_wait_time->msec(), 1);
00499 }
00500
00501 }
|
|
||||||||||||||||||||
|
Schedule an ACE_Event_Handler that will expire after an amount of time. The return value of this method, a timer_id value, uniquely identifies the event_handler in the ACE_Reactor's internal list of timers. This timer_id value can be used to cancel the timer with the cancel_timer() call.
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 505 of file QtReactor.cpp. References ACE_GUARD_RETURN, ACE_Select_Reactor_Token, ACE_TRACE, reset_timeout(), and ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::schedule_timer().
00509 {
00510 ACE_TRACE ("ACE_QtReactor::schedule_timer");
00511 ACE_MT (ACE_GUARD_RETURN (ACE_Select_Reactor_Token,
00512 ace_mon,
00513 this->token_,
00514 -1));
00515
00516 long result;
00517 if ((result = ACE_Select_Reactor::schedule_timer(handler,
00518 arg,
00519 delay_time,
00520 interval)) == -1 )
00521 return -1;
00522 else
00523 {
00524 this->reset_timeout ();
00525 return result;
00526 }
00527 }
|
|
||||||||||||||||
|
Definition at line 220 of file QtReactor.cpp. References ACE_BIT_ENABLED, ACE_Reactor_Mask, exception_notifier_, ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), read_notifier_, and write_notifier_. Referenced by bit_ops(), exception_event(), read_event(), and write_event().
00223 {
00224 QSocketNotifier *qs_not;
00225
00226 if (ACE_BIT_ENABLED(mask, ACE_Event_Handler::READ_MASK) ||
00227 ACE_BIT_ENABLED( mask, ACE_Event_Handler::ACCEPT_MASK))
00228 {
00229 // Find the current notifier
00230 qs_not = 0;
00231 if ((this->read_notifier_.find (handle, qs_not) == -1))
00232 return -1;
00233
00234 qs_not->setEnabled (flag_value);
00235 }
00236
00237 if (ACE_BIT_ENABLED( mask, ACE_Event_Handler::WRITE_MASK) ||
00238 ACE_BIT_ENABLED( mask, ACE_Event_Handler::ACCEPT_MASK) ||
00239 ACE_BIT_ENABLED( mask, ACE_Event_Handler::CONNECT_MASK))
00240 {
00241 qs_not = 0;
00242 if ((this->write_notifier_.find (handle, qs_not) == -1))
00243 return -1;
00244
00245 qs_not->setEnabled (flag_value);
00246 }
00247
00248 if (ACE_BIT_ENABLED( mask,
00249 ACE_Event_Handler::EXCEPT_MASK))
00250 {
00251 qs_not = 0;
00252 if ((this->exception_notifier_.find (handle, qs_not) == -1))
00253 return -1;
00254
00255 qs_not->setEnabled (flag_value);
00256 }
00257
00258 return 0;
00259 }
|
|
|
Dispach a timeout event.
Definition at line 120 of file QtReactor.cpp. References ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::dispatch(), and reset_timeout(). Referenced by reset_timeout().
00121 {
00122 // Deal with any timer events
00123 ACE_Select_Reactor_Handle_Set handle_set;
00124 this->dispatch (0, handle_set );
00125
00126 // Set next timeout signal
00127 this->reset_timeout ();
00128 }
|
|
||||||||||||
|
Wait for events to occur.
Reimplemented from ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >. Definition at line 595 of file QtReactor.cpp. References ACE_TRACE, ACE_Timer_Queue_T< TYPE, FUNCTOR, ACE_LOCK >::calculate_timeout(), ACE_Select_Reactor_Handle_Set::ex_mask_, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::handle_error(), ACE_Select_Reactor_Handler_Repository::max_handlep1(), QtWaitForMultipleEvents(), ACE_Select_Reactor_Handle_Set::rd_mask_, ACE_Handle_Set::sync(), and ACE_Select_Reactor_Handle_Set::wr_mask_.
00598 {
00599 ACE_TRACE ("ACE_QtReactor::wait_for_multiple_events");
00600
00601 int nfound = 0;
00602 do
00603 {
00604 max_wait_time = this->timer_queue_->calculate_timeout (max_wait_time);
00605 size_t width = this->handler_rep_.max_handlep1 ();
00606 handle_set.rd_mask_ = this->wait_set_.rd_mask_;
00607 handle_set.wr_mask_ = this->wait_set_.wr_mask_;
00608 handle_set.ex_mask_ = this->wait_set_.ex_mask_;
00609
00610 nfound = QtWaitForMultipleEvents (width,
00611 handle_set,
00612 max_wait_time);
00613
00614 } while( nfound == -1 && this->handle_error () > 0 );
00615
00616 if (nfound > 0)
00617 {
00618 #if !defined (ACE_WIN32)
00619 handle_set.rd_mask_.sync (this->handler_rep_.max_handlep1 ());
00620 handle_set.wr_mask_.sync (this->handler_rep_.max_handlep1 ());
00621 handle_set.ex_mask_.sync (this->handler_rep_.max_handlep1 ());
00622 #endif /* ACE_WIN32 */
00623 }
00624
00625 return nfound;
00626 // Timed out or input available
00627 }
|
|
|
Dispatch a Write Event.
Definition at line 161 of file QtReactor.cpp. References ACE_Reactor_Mask, ACE_TRACE, ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::dispatch(), ACE_Map_Manager< EXT_ID, INT_ID, ACE_LOCK >::find(), ACE_Select_Reactor_T< ACE_SELECT_REACTOR_TOKEN >::mask_ops(), ACE_Handle_Set::set_bit(), set_enable_flag_by_mask(), ACE_Select_Reactor_Handle_Set::wr_mask_, and write_notifier_. Referenced by create_notifiers_for_handle().
00162 {
00163 ACE_TRACE ("ACE_QtReactor::write_event");
00164
00165 ACE_HANDLE handle = ACE_HANDLE( p_handle );
00166
00167 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00168 // disable socket notifier to clear pending events
00169 QSocketNotifier *qsock_notifier = 0;
00170 if ( ( this->write_notifier_.find( handle, qsock_notifier) != -1) )
00171 qsock_notifier->setEnabled( false );
00172 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00173
00174 // The core of write event handling
00175 ACE_Select_Reactor_Handle_Set dispatch_set;
00176
00177 dispatch_set.wr_mask_.set_bit( handle );
00178 this->dispatch (1, dispatch_set);
00179
00180 #ifdef ACE_QTREACTOR_CLEAR_PENDING_EVENTS
00181 // enable socket notifier according to current mask
00182 ACE_Reactor_Mask mask = 0;
00183 mask = mask_ops( handle, mask, ACE_Reactor::GET_MASK );
00184 if ( -1 != mask )
00185 set_enable_flag_by_mask ( 1, handle, mask);
00186 #endif /* ACE_QTREACTOR_CLEAR_PENDING_EVENTS */
00187 }
|
|
|
An exception notifier.
Definition at line 188 of file QtReactor.h. Referenced by create_notifiers_for_handle(), destroy_notifiers_for_handle(), exception_event(), set_enable_flag_by_mask(), and ~ACE_QtReactor(). |
|
|
Some Qt stuff that we need to have.
Definition at line 176 of file QtReactor.h. Referenced by qapplication(), and QtWaitForMultipleEvents(). |
|
|
The timer class that would provide timer-sgnals & single-shot timers.
Definition at line 191 of file QtReactor.h. Referenced by reset_timeout(), and ~ACE_QtReactor(). |
|
|
A notifier for a read.
Definition at line 182 of file QtReactor.h. Referenced by create_notifiers_for_handle(), destroy_notifiers_for_handle(), read_event(), set_enable_flag_by_mask(), and ~ACE_QtReactor(). |
|
|
A write notifier.
Definition at line 185 of file QtReactor.h. Referenced by create_notifiers_for_handle(), destroy_notifiers_for_handle(), set_enable_flag_by_mask(), write_event(), and ~ACE_QtReactor(). |
1.3.6