1
0

Use std::thread

This commit is contained in:
Tiger Wang
2014-10-19 00:29:34 +01:00
parent 5d43dc0f45
commit 6d5a8892f3
13 changed files with 60 additions and 433 deletions

View File

@@ -44,53 +44,13 @@ public:
/// Waits for the thread to finish. Doesn't signalize the ShouldTerminate flag
bool Wait(void);
/// Returns the OS-dependent thread ID for the caller's thread
static unsigned long GetCurrentID(void);
/** Returns true if the thread calling this function is the thread contained within this object. */
bool IsCurrentThread(void) const;
bool IsCurrentThread(void) const { return std::this_thread::get_id() == m_Thread.get_id(); }
protected:
AString m_ThreadName;
// Value used for "no handle":
#ifdef _WIN32
#define NULL_HANDLE NULL
#else
#define NULL_HANDLE 0
#endif
#ifdef _WIN32
DWORD m_ThreadID;
HANDLE m_Handle;
static DWORD __stdcall thrExecute(LPVOID a_Param)
{
// Create a window so that the thread can be identified by 3rd party tools:
HWND IdentificationWnd = CreateWindowA("STATIC", ((cIsThread *)a_Param)->m_ThreadName.c_str(), 0, 0, 0, 0, WS_OVERLAPPED, NULL, NULL, NULL, NULL);
// Run the thread:
((cIsThread *)a_Param)->Execute();
// Destroy the identification window:
DestroyWindow(IdentificationWnd);
return 0;
}
#else // _WIN32
pthread_t m_Handle;
static void * thrExecute(void * a_Param)
{
((cIsThread *)a_Param)->Execute();
return NULL;
}
#endif // else _WIN32
std::thread m_Thread;
} ;