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.
|
friend |
Definition at line 23 of file TGWin32ProxyBase.h.
|
friend |
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.