cwThread.h/cpp : Added stateTimeOutMicros() and pauseMicros().
This commit is contained in:
parent
864142b9f0
commit
b721d11b1a
23
cwThread.cpp
23
cwThread.cpp
@ -37,7 +37,7 @@ namespace cw
|
|||||||
inline thread_t* _handleToPtr(handle_t h) { return handleToPtr<handle_t,thread_t>(h); }
|
inline thread_t* _handleToPtr(handle_t h) { return handleToPtr<handle_t,thread_t>(h); }
|
||||||
|
|
||||||
// Called from client thread to wait for the internal thread to transition to a specified state.
|
// Called from client thread to wait for the internal thread to transition to a specified state.
|
||||||
rc_t _waitForState( thread_t* p, unsigned stateId )
|
rc_t _waitForState( thread_t* p, stateId_t stateId )
|
||||||
{
|
{
|
||||||
unsigned waitTimeMicroSecs = 0;
|
unsigned waitTimeMicroSecs = 0;
|
||||||
stateId_t curStateId;
|
stateId_t curStateId;
|
||||||
@ -54,7 +54,7 @@ namespace cw
|
|||||||
waitTimeMicroSecs += p->sleepMicros;
|
waitTimeMicroSecs += p->sleepMicros;
|
||||||
|
|
||||||
}while( waitTimeMicroSecs < p->stateMicros );
|
}while( waitTimeMicroSecs < p->stateMicros );
|
||||||
|
|
||||||
return curStateId==stateId ? kOkRC : kTimeOutRC;
|
return curStateId==stateId ? kOkRC : kTimeOutRC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +143,7 @@ cw::rc_t cw::thread::create( handle_t& hRef, cbFunc_t func, void* funcArg, int s
|
|||||||
rc = cwLogSysError(kOpFailRC,sysRC,"Thread attribute init failed.");
|
rc = cwLogSysError(kOpFailRC,sysRC,"Thread attribute init failed.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
// Creating the thread in a detached state should prevent it from leaking memory when
|
// Creating the thread in a detached state should prevent it from leaking memory when
|
||||||
@ -160,6 +161,7 @@ cw::rc_t cw::thread::create( handle_t& hRef, cbFunc_t func, void* funcArg, int s
|
|||||||
p->stateId = kNotInitThId;
|
p->stateId = kNotInitThId;
|
||||||
rc = cwLogSysError(kOpFailRC,sysRC,"Thread create failed.");
|
rc = cwLogSysError(kOpFailRC,sysRC,"Thread create failed.");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hRef.set(p);
|
hRef.set(p);
|
||||||
return rc;
|
return rc;
|
||||||
@ -205,7 +207,7 @@ cw::rc_t cw::thread::pause( handle_t h, unsigned cmdFlags )
|
|||||||
thread_t* p = _handleToPtr(h);
|
thread_t* p = _handleToPtr(h);
|
||||||
stateId_t curStateId = p->stateId.load(std::memory_order_acquire);
|
stateId_t curStateId = p->stateId.load(std::memory_order_acquire);
|
||||||
bool isPausedFl = curStateId == kPausedThId;
|
bool isPausedFl = curStateId == kPausedThId;
|
||||||
unsigned waitId;
|
stateId_t waitId;
|
||||||
|
|
||||||
if( isPausedFl == pauseFl )
|
if( isPausedFl == pauseFl )
|
||||||
return kOkRC;
|
return kOkRC;
|
||||||
@ -225,7 +227,7 @@ cw::rc_t cw::thread::pause( handle_t h, unsigned cmdFlags )
|
|||||||
rc = _waitForState(p,waitId);
|
rc = _waitForState(p,waitId);
|
||||||
|
|
||||||
if( rc != kOkRC )
|
if( rc != kOkRC )
|
||||||
cwLogError(rc,"Thread timed out waiting for '%s'.", pauseFl ? "pause" : "un-pause");
|
cwLogError(rc,"Thread timed out waiting for '%s'. pauseMicros:%i stateMicros:%i sleepMicros:%i", pauseFl ? "pause" : "un-pause",p->pauseMicros,p->stateMicros,p->sleepMicros);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
@ -256,6 +258,19 @@ cw::thread::thread_id_t cw::thread::id()
|
|||||||
return id.u.id;
|
return id.u.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned cw::thread::stateTimeOutMicros( handle_t h)
|
||||||
|
{
|
||||||
|
thread_t* p = _handleToPtr(h);
|
||||||
|
return p->stateMicros;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned cw::thread::pauseMicros( handle_t h )
|
||||||
|
{
|
||||||
|
thread_t* p = _handleToPtr(h);
|
||||||
|
return p->pauseMicros;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
namespace cw
|
namespace cw
|
||||||
{
|
{
|
||||||
bool _threadTestCb( void* p )
|
bool _threadTestCb( void* p )
|
||||||
|
@ -35,6 +35,9 @@ namespace cw
|
|||||||
|
|
||||||
// Return the thread id of the calling context.
|
// Return the thread id of the calling context.
|
||||||
thread_id_t id();
|
thread_id_t id();
|
||||||
|
|
||||||
|
unsigned stateTimeOutMicros( handle_t h);
|
||||||
|
unsigned pauseMicros( handle_t h );
|
||||||
}
|
}
|
||||||
rc_t threadTest();
|
rc_t threadTest();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user