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.