Proxy classes provide thread-safe interface to global objects.
For example: TGWin32VirtualXProxy (to gVirtualX).
Proxy object creates callback object and posts a windows message to "processing thread". When windows message is received callback ("real method") is executed.
For example: gVirtualX->ClearWindow()
Howto create proxy class:
Naming. name of proxy = TGWin32 + the name of "virtual base class" + Proxy
e.g. TGWin32VirtualXProxy = TGWin32 + VirtualX + Proxy
Class definition. proxy class must be inherited from "virtual base class" and TGWin32ProxyBase class. For example:
class TGWin32VirtualX : public TVirtualX , public TGWin32ProxyBase
Constructors, destructor, extra methods.
For example: static TVirtualX *RealObject(); static TVirtualX *ProxyObject();
the names of other macros say about itself.
For example: VOID_METHOD_ARG0(VirtualX,SetFillAttributes,1) void TGWin32VirtualXProxy::SetFillAttributes()
RETURN_METHOD_ARG0_CONST(VirtualX,Visual_t,GetVisual) Visual_t TGWin32VirtualXProxy::GetVisual() const
RETURN_METHOD_ARG2(VirtualX,Int_t,OpenPixmap,UInt_t,w,UInt_t,h) Int_t TGWin32VirtualXProxy::OpenPixmap,UInt_t w,UInt_t h)
Definition at line 22 of file TGWin32ProxyBase.h.
Public Member Functions | |
| TGWin32ProxyBase () | |
| ctor   | |
| virtual | ~TGWin32ProxyBase () | 
| dtor   | |
| virtual void | ExecuteCallBack (Bool_t sync) | 
| Executes all batched callbacks and the latest callback This method is executed by server thread.   | |
| ULong_t | GetId () const | 
| virtual Double_t | GetMilliSeconds () | 
| returns elapsed time in milliseconds with microseconds precision   | |
Static Public Member Functions | |
| static void | GlobalLock () | 
| lock any proxy (client thread)   | |
| static void | GlobalUnlock () | 
| unlock any proxy (client thread)   | |
| static Bool_t | IsGloballyLocked () | 
| Check the status of the lock.   | |
| static void | Lock () | 
| enter critical section   | |
| static Bool_t | Ping () | 
| send ping messsage to server thread   | |
| static void | Unlock () | 
| leave critical section   | |
Static Public Attributes | |
| static ULong_t | fgMainThreadId = 0 | 
| main thread ID   | |
| static ULong_t | fgPingMessageId = 0 | 
| ping message ID   | |
| static ULong_t | fgPostMessageId = 0 | 
| post message ID   | |
| static ULong_t | fgUserThreadId = 0 | 
| user (e.g. python) thread ID   | |
Protected Member Functions | |
| virtual Bool_t | ForwardCallBack (Bool_t sync) | 
| if sync is kTRUE:   | |
| virtual void | SendExitMessage () | 
| send exit message to server thread   | |
Protected Attributes | |
| Int_t | fBatchLimit | 
| batch limit   | |
| TGWin32CallBack | fCallBack | 
| callback function (executed by "main" thread)   | |
| ULong_t | fId | 
| thread id. There is one proxy per client thread   | |
| Bool_t | fIsVirtualX | 
| true if actual TVirtualX implementation   | |
| TList * | fListOfCallBacks | 
| list of callbacks (used for batch processing)   | |
| void * | fParam | 
| arguments passed to/from callback function   | |
| TGWin32ProxyBasePrivate * | fPimpl | 
| very private data   | |
Static Protected Attributes | |
| static Long_t | fgLock = 0 | 
| fgLock=1 - all client threads locked   | |
| static UInt_t | fMaxResponseTime = 0 | 
| max period for waiting response from server thread   | |
Friends | |
| class | TGWin32 | 
| class | TGWin32GL | 
#include <TGWin32ProxyBase.h>
| TGWin32ProxyBase::TGWin32ProxyBase | ( | ) | 
ctor
Definition at line 136 of file TGWin32ProxyBase.cxx.
      
  | 
  virtual | 
dtor
Definition at line 153 of file TGWin32ProxyBase.cxx.
      
  | 
  virtual | 
Executes all batched callbacks and the latest callback This method is executed by server thread.
Definition at line 235 of file TGWin32ProxyBase.cxx.
if sync is kTRUE:
returns kTRUE if callback execution is delayed (batched)
Definition at line 262 of file TGWin32ProxyBase.cxx.
      
  | 
  inline | 
Definition at line 58 of file TGWin32ProxyBase.h.
      
  | 
  virtual | 
returns elapsed time in milliseconds with microseconds precision
Definition at line 207 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
lock any proxy (client thread)
Definition at line 181 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
unlock any proxy (client thread)
Definition at line 190 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
Check the status of the lock.
Definition at line 327 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
enter critical section
Definition at line 165 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
send ping messsage to server thread
Definition at line 199 of file TGWin32ProxyBase.cxx.
      
  | 
  protectedvirtual | 
send exit message to server thread
Definition at line 335 of file TGWin32ProxyBase.cxx.
      
  | 
  static | 
leave critical section
Definition at line 173 of file TGWin32ProxyBase.cxx.
Definition at line 23 of file TGWin32ProxyBase.h.
Definition at line 24 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
batch limit
Definition at line 28 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
callback function (executed by "main" thread)
Definition at line 30 of file TGWin32ProxyBase.h.
      
  | 
  staticprotected | 
fgLock=1 - all client threads locked
Definition at line 35 of file TGWin32ProxyBase.h.
      
  | 
  static | 
main thread ID
Definition at line 43 of file TGWin32ProxyBase.h.
      
  | 
  static | 
ping message ID
Definition at line 42 of file TGWin32ProxyBase.h.
      
  | 
  static | 
post message ID
Definition at line 41 of file TGWin32ProxyBase.h.
      
  | 
  static | 
user (e.g. python) thread ID
Definition at line 44 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
thread id. There is one proxy per client thread
Definition at line 32 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
true if actual TVirtualX implementation
Definition at line 33 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
list of callbacks (used for batch processing)
Definition at line 29 of file TGWin32ProxyBase.h.
      
  | 
  staticprotected | 
max period for waiting response from server thread
Definition at line 34 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
arguments passed to/from callback function
Definition at line 31 of file TGWin32ProxyBase.h.
      
  | 
  protected | 
very private data
Definition at line 27 of file TGWin32ProxyBase.h.