Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cThreadChecked Class Reference

#include <cThread.h>

Inheritance diagram for GrayLib::cThreadChecked:
GrayLib::cThread GrayLib::cThreadBase Gray::cRefBase Gray::cThreadState Gray::CObject Gray::cThreadId IUnknown GrayLib::cThreadNamed< cUnitTestHttpClient > GrayLib::cThreadNamed< cNetServerThread > GrayLib::cThreadNamed< cJobThreadSeq > GrayLib::cThreadNamed< cUnitTestSecureClient > GrayLib::cThreadNamed< cJobThread > GrayLib::cThreadNamed< cUnitTestOSPipe > GrayLib::cThreadNamed< cUnitTestXProtocolClient > GrayLib::cThreadNamed< cCmdCPULoadThread > GrayLib::cThreadNamed< cUnitTestSSL > GrayLib::cThreadNamed< cLogThread > GrayLib::cThreadNamed< cUnitTestThread > GrayLib::cThreadNamed< cThreadFiber > GrayLib::cThreadNamed< _TYPE >

Public Member Functions

 cThreadChecked ()
 
virtual ~cThreadChecked ()
 
virtual bool CheckStuckThread (TIMESYSD_t iMilliSecTilStuck, bool bTerminateAndRestart)
 called by external thread. More...
 
UINT get_ThreadTicks () const
 
bool isCriticalWait () const
 
void ChangeCriticalWait (int iDelta)
 
- Public Member Functions inherited from GrayLib::cThread
 cThread ()
 
virtual ~cThread ()
 
bool isValidThreadHandle () const noexcept
 
THREADID_t get_HashCode () const noexcept
 
virtual bool isValidCheck () const noexcept
 < memory allocation and structure definitions are valid. More...
 
 STDMETHOD_ (cString, get_Name)() const
 override memory allocation and structure definitions are valid. More...
 
bool isThreadSleeping () const noexcept
 
THREAD_EXITCODE_t get_ExitCodeThread () const
 
int get_ThreadPriority () const
 
bool put_ThreadPriority (int nPriority)
 
bool SuspendThread ()
 
bool ResumeThread ()
 
virtual HRESULT SleepThread (TIMESYSD_t dwWaitMillisec=1, bool bAlertable=false)
 
virtual void WakeThread ()
 
virtual bool RequestStopThread (bool bWillWait=false) noexcept override
 
bool ExitCurrentThread (THREAD_EXITCODE_t nExitCode=THREAD_EXITCODE_OK)
 
bool WaitForThreadExit (TIMESYSD_t nMilliSec=cTimeSys::k_FREQ)
 
THREAD_EXITCODE_t WaitForThreadExitCode (TIMESYSD_t iTimeMSec=cTimeSys::k_FREQ)
 
bool TerminateThread (THREAD_EXITCODE_t iExitCode=THREAD_EXITCODE_ERR, TIMESYSD_t nMilliSec=0)
 
void AttachToCurrentThread ()
 
HRESULT CreateThread (THREAD_FUNC_t pEntryProc, void *pArgs, DWORD dwCreationFlags=0)
 
virtual HRESULT CreateThread (DWORD dwCreationFlags=0)
 
void CloseThread ()
 
- Public Member Functions inherited from GrayLib::cThreadBase
 cThreadBase () noexcept
 
virtual ~cThreadBase ()
 
- Public Member Functions inherited from Gray::CObject
virtual ~CObject ()
 
virtual void AssertValid () const
 < memory allocation and structure definitions are valid. More...
 
virtual void Serialize (cArchive &a)
 
- Public Member Functions inherited from Gray::cThreadId
 cThreadId (THREADID_t nThreadId=k_NULL) noexcept
 
THREADID_t GetThreadId () const noexcept
 
THREADID_t get_HashCode () const noexcept
 
bool isCurrentThread () const noexcept
 
bool isValidId () const noexcept
 
void InitCurrentId () noexcept
 
- Public Member Functions inherited from Gray::cRefBase
 cRefBase (int iRefCount=0) noexcept
 
virtual ~cRefBase ()
 
int get_RefCount () const noexcept
 
HASHCODE_t get_HashCode () const noexcept
 
 STDMETHOD_ (HASHCODE_t, get_HashCodeX)() const noexcept
 
virtual void onFinalRelease ()
 
bool isValidObj () const noexcept
 
 STDMETHOD_ (ULONG, AddRef)(void) override
 
 STDMETHOD_ (ULONG, Release)(void) override
 
STDMETHOD() QueryInterface (const IID &riid, void __RPC_FAR *__RPC_FAR *ppvObject) override
 
void IncRefCount ()
 
void DecRefCount ()
 
bool isStaticConstruct () const noexcept
 
void StaticConstruct ()
 
void StaticDestruct ()
 
bool isDestructing () noexcept
 
void SetDestructing ()
 
- Public Member Functions inherited from Gray::cThreadState
 cThreadState () noexcept
 
bool isThreadRunning () const noexcept
 
bool isThreadStopping () const noexcept
 

Static Public Member Functions

static cThreadChecked *GRAYCALL GetCurrentThreadChecked ()
 
- Static Public Member Functions inherited from GrayLib::cThread
static cThread *GRAYCALL GetCurrentThread ()
 
static bool GRAYCALL IsCurrentThreadStopping ()
 
static void GRAYCALL RequestStopThreadArray (bool bWillWait, cThread **ppThreads, size_t nThreads)
 
static void GRAYCALL TerminateThreadArray (THREAD_EXITCODE_t nExitCode, TIMESYSD_t iTimeMSec, cThread **ppThreads, size_t nThreads)
 
- Static Public Member Functions inherited from Gray::cThreadId
static THREADID_t GetCurrentId () noexcept
 
static bool IsValidId (THREADID_t id) noexcept
 
static bool IsEqualId (THREADID_t a, THREADID_t b) noexcept
 
static void SleepCurrent (TIMESYS_t uMs=cTimeSys::k_FREQ) noexcept
 

Public Attributes

UINT m_nThreadTicksLast
 checked periodically by outside observer. More...
 
cTimeSys m_tStart
 When did thread first run ? More...
 
TIMESYS_t m_timeLastChanged
 Last outside detected tick change time. More...
 
UINT m_nRecoveryStage
 What have we done about being stuck ? More...
 

Protected Member Functions

virtual bool ThreadTick () override
 
virtual void onThreadCreate () override
 Notification that the thread has started or stopped. More...
 
- Protected Member Functions inherited from GrayLib::cThread
virtual THREAD_EXITCODE_t Run ()
 WorkerThreadProc. More...
 
THREAD_EXITCODE_t RunDirectly ()
 
virtual void onThreadExit (THREAD_EXITCODE_t nExitCode)
 OnExit. More...
 
void onThreadTerminated (THREAD_EXITCODE_t nExitCode)
 

Protected Attributes

UINT m_nThreadTicks
 periodically increment this to make sure the thread is alive! More...
 
- Protected Attributes inherited from GrayLib::cThread
bool m_bThreadSleeping
 Idle worker threads waiting for something to do. inside Sleep() or WaitForSingleObject() More...
 
bool m_bThreadSuspended
 May be resumed. inside Suspend() -> Resume() More...
 
- Protected Attributes inherited from GrayLib::cThreadBase
THREADHANDLE_t m_hThread
 there may be many handles to the same THREADID_t in _WIN32. I must call CloseThread() on this. More...
 
- Protected Attributes inherited from Gray::cThreadId
THREADID_t m_dwThreadId
 unique thread id. i.e. stack base pointer. (Use the MFC name) More...
 
- Protected Attributes inherited from Gray::cThreadState
bool m_bThreadRunning
 called CreateThread() onThreadCreate(), and inside Run(), until onThreadExit() More...
 
volatile bool m_bThreadStopping
 trying to stop the thread nicely. Do this before TerminateThread() More...
 

Additional Inherited Members

- Static Public Attributes inherited from Gray::cThreadId
static const THREADID_t k_NULL = 0
 Not a valid thread Id. More...
 
- Static Protected Member Functions inherited from GrayLib::cThread
static THREAD_EXITCODE_t _stdcall EntryProc (void *pThisThread)
 _WorkerThreadProc More...
 

Detailed Description

A thread that can be checked from an outside thread. Periodically called to check if this thread is stuck. if so, then do something about it !

Constructor & Destructor Documentation

◆ cThreadChecked()

GrayLib::cThreadChecked::cThreadChecked ( )

◆ ~cThreadChecked()

GrayLib::cThreadChecked::~cThreadChecked ( )
virtual

Member Function Documentation

◆ ChangeCriticalWait()

void GrayLib::cThreadChecked::ChangeCriticalWait ( int  iDelta)
inline

Tell the system that this thread may not respond for a bit.

◆ CheckStuckThread()

bool GrayLib::cThreadChecked::CheckStuckThread ( TIMESYSD_t  iMilliSecTilStuck,
bool  bTerminateAndRestart 
)
virtual

called by external thread.

Called from a separate thread.

  • iMilliSecTilStuck = time to wait before assuming we are stuck.
    Returns
    true = restarted ! ASSUME cThreadPtr has inc ref.

◆ get_ThreadTicks()

UINT GrayLib::cThreadChecked::get_ThreadTicks ( ) const
inline

◆ GetCurrentThreadChecked()

cThreadChecked *GRAYCALL GrayLib::cThreadChecked::GetCurrentThreadChecked ( )
static
Note
Use DYNPTR_CAST in case the GetCurrentThread isn't really a cThreadChecked

◆ isCriticalWait()

bool GrayLib::cThreadChecked::isCriticalWait ( ) const
inline

Thread wants some extra time to do some big job?

◆ onThreadCreate()

void GrayLib::cThreadChecked::onThreadCreate ( )
overrideprotectedvirtual

Notification that the thread has started or stopped.

OnCreate for MFC

Call this when the thread starts. ONLY called ON the thread context itself ! Never by external thread. The id for the thread is different from the thread handle. There may be many handles but only one id ! don't worry about stop/terminating a thread before it starts. true terminate means this will not get called anyhow.

Reimplemented from GrayLib::cThread.

◆ ThreadTick()

virtual bool GrayLib::cThreadChecked::ThreadTick ( )
inlineoverrideprotectedvirtual

Override this instead of override of Run(). This thread declares itself alive. Must call this periodically!

Returns
true = thread should keep running. false = thread should exit.

Reimplemented from GrayLib::cThread.

Reimplemented in GrayLib::cThreadFiber, GrayLib::cLogThread, GrayLib::cJobThread, GrayLib::cJobFiber, and GrayLib::cNetServerThread.

Member Data Documentation

◆ m_nRecoveryStage

UINT GrayLib::cThreadChecked::m_nRecoveryStage

What have we done about being stuck ?

◆ m_nThreadTicks

UINT GrayLib::cThreadChecked::m_nThreadTicks
protected

periodically increment this to make sure the thread is alive!

◆ m_nThreadTicksLast

UINT GrayLib::cThreadChecked::m_nThreadTicksLast

checked periodically by outside observer.

Last outside detected tick

◆ m_timeLastChanged

TIMESYS_t GrayLib::cThreadChecked::m_timeLastChanged

Last outside detected tick change time.

◆ m_tStart

cTimeSys GrayLib::cThreadChecked::m_tStart

When did thread first run ?


The documentation for this class was generated from the following files: