36 TCondition::TCondition(TMutex *m)
38 fPrivateMutex = (m == 0);
40 fMutex =
new TMutex();
45 fConditionImp = gThreadFactory->CreateConditionImp(fMutex->fMutexImp);
48 Error(
"TCondition",
"could not create TConditionImp");
54 TCondition::~TCondition()
57 if (fPrivateMutex)
delete fMutex;
65 TMutex *TCondition::GetMutex()
const
75 Int_t TCondition::Wait()
77 if (!fConditionImp)
return -1;
80 if (fPrivateMutex) fMutex->Lock();
81 iret = fConditionImp->Wait();
82 if (fPrivateMutex) fMutex->UnLock();
95 Int_t TCondition::TimedWait(ULong_t secs, ULong_t nanoSec)
97 if (!fConditionImp)
return -1;
100 if (fPrivateMutex) fMutex->Lock();
101 iret = fConditionImp->TimedWait(secs, nanoSec);
102 if (fPrivateMutex) fMutex->UnLock();
114 Int_t TCondition::TimedWaitRelative(ULong_t ms)
116 if (!fConditionImp)
return -1;
118 ULong_t absSec, absNanoSec;
119 TThread::GetTime(&absSec, &absNanoSec);
121 ULong_t dsec = ms/1000;
123 absNanoSec += (ms - dsec*1000) * 1000000;
124 if (absNanoSec > 999999999) {
126 absNanoSec -= 1000000000;
129 return TimedWait(absSec, absNanoSec);