94 class TGWin32CallBackObject :
public TObject {
99 TGWin32CallBackObject(
TGWin32CallBack cb,
void *p):fCallBack(cb),fParam(p) {}
100 ~TGWin32CallBackObject() {
if (fParam)
delete fParam; }
104 class TGWin32ProxyBasePrivate {
107 TGWin32ProxyBasePrivate();
108 ~TGWin32ProxyBasePrivate();
114 TGWin32ProxyBasePrivate::TGWin32ProxyBasePrivate()
116 fEvent = ::CreateEvent(
NULL, TRUE, FALSE,
NULL);
122 TGWin32ProxyBasePrivate::~TGWin32ProxyBasePrivate()
124 if (fEvent) ::CloseHandle(fEvent);
147 fId = ::GetCurrentThreadId();
148 fPimpl =
new TGWin32ProxyBasePrivate();
188 ::InterlockedIncrement(&
fgLock);
197 ::InterlockedDecrement(&
fgLock);
213 static LARGE_INTEGER freq;
219 LARGE_INTEGER count0;
220 ::QueryPerformanceFrequency(&freq);
221 ::QueryPerformanceCounter(&count0);
224 dummy = ((
Double_t)count0.QuadPart - overhead)*1000./((
Double_t)freq.QuadPart);
226 ::QueryPerformanceCounter(&count);
231 ::QueryPerformanceCounter(&count);
232 return ((
Double_t)count.QuadPart - overhead)*1000./((
Double_t)freq.QuadPart);
244 TGWin32CallBackObject *obj;
246 while ((obj = (TGWin32CallBackObject*)next())) {
247 obj->fCallBack(obj->fParam);
252 ::SetEvent(
fPimpl->fEvent);
274 #ifdef OLD_THREAD_IMPLEMENTATION
299 if (wait++ > 5)
return kFALSE;
302 #ifdef OLD_THREAD_IMPLEMENTATION
306 DWORD res = WAIT_TIMEOUT;
307 while (res == WAIT_TIMEOUT) {
308 res = ::WaitForSingleObject(
fPimpl->fEvent, 100);
309 #ifdef OLD_THREAD_IMPLEMENTATION
314 if (cnt++ > 20)
break;
317 ::ResetEvent(
fPimpl->fEvent);
319 if (res == WAIT_TIMEOUT) {
virtual void ExecuteCallBack(Bool_t sync)
Executes all batched callbacks and the latest callback This method is executed by server thread...
void * fParam
arguments passed to/from callback function
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
TGWin32CallBack fCallBack
callback function (executed by "main" thread)
TList * fListOfCallBacks
list of callbacks (used for batch processing)
static void GlobalUnlock()
unlock any proxy (client thread)
RooArgList L(const RooAbsArg &v1)
static UInt_t fMaxResponseTime
max period for waiting response from server thread
virtual ~TGWin32ProxyBase()
dtor
static void Lock()
enter critical section
virtual void SendExitMessage()
send exit message to server thread
static Long_t fgLock
fgLock=1 - all client threads locked
static void GlobalLock()
lock any proxy (client thread)
static ULong_t fgMainThreadId
main thread ID
static ULong_t fgPostMessageId
post message ID
static ULong_t fgUserThreadId
user (e.g. python) thread ID
Int_t fBatchLimit
batch limit
Bool_t fIsVirtualX
true if actual TVirtualX implementation
virtual Int_t GetSize() const
static RooMathCoreReg dummy
ULong_t fId
thread id. There is one proxy per client thread
TGWin32ProxyBasePrivate * fPimpl
very private data
virtual Bool_t ForwardCallBack(Bool_t sync)
if sync is kTRUE:
static ULong_t fgPingMessageId
ping message ID
Mother of all ROOT objects.
static Bool_t IsGloballyLocked()
Check the status of the lock.
virtual void Add(TObject *obj)
virtual Double_t GetMilliSeconds()
returns elapsed time in milliseconds with microseconds precision
static Bool_t Ping()
send ping messsage to server thread
static void Unlock()
leave critical section
void(* TGWin32CallBack)(void *)