.h
#ifndef CTHREAD_H_
#define CTHREAD_H_
#include "plat.h"
class CThread
{
public:
enum
{
enmThreadTerminateTimeout = 2000,
};
CThread();
virtual ~CThread();
int32_t Start();
virtual int32_t Terminate();
virtual void Execute();
protected:
#ifdef OS_WIN32
uint32_t m_nTimeOut;
HANDLE m_hThread;
#else
pthread_t m_thread;
pthread_mutex_t m_stMutex;
#endif
bool m_bTerminated;
};
#endif
.cpp
#include "thread.h"
#include "common_api.h"
#ifdef OS_WIN32
void ThreadProc(void *pParam)
{
if (NULL == pParam)
{
return;
}
CThread *p = (CThread*)pParam;
p->Execute();
}
#else
void* ThreadProc(void* pParam)
{
if (NULL == pParam)
{
return NULL;
}
CThread *p = (CThread*)pParam;
p->Execute();
return NULL;
}
#endif
CThread::CThread()
{
#ifdef OS_WIN32
m_nTimeOut = enmThreadTerminateTimeout;
m_hThread = INVALID_HANDLE_VALUE;
#else
m_thread = 0;
#endif
m_bTerminated = false;
}
CThread::~CThread()
{
Terminate();
}
int32_t CThread::Start()
{
m_bTerminated = false;
#ifdef OS_WIN32
m_hThread = (HANDLE)_beginthread(ThreadProc, 0, this);
#else
pthread_create(&m_thread, NULL, ThreadProc, this);
#endif
return 0;
}
int32_t CThread::Terminate()
{
if (m_bTerminated == true)
{
return 0;
}
m_bTerminated = true;
#ifdef OS_WIN32
if (m_hThread != INVALID_HANDLE_VALUE)
{
// wait for (m_nTimeOut) milliseconds or Excute() return
WaitForSingleObject(m_hThread, m_nTimeOut);
}
#else
if (m_thread != 0)
{
// wait Excute() return
pthread_join(m_thread, NULL);
}
#endif
return 0;
}
void CThread::Execute()
{
uint32_t n = 0;
while (!m_bTerminated)
{
if ((++n) % 1000 == 0)
{
printf("%d\n", n);
}
Delay(1);
}
#ifdef WIN32
_endthread();
#else
pthread_exit(NULL);
#endif
}
原文链接: https://www.cnblogs.com/tangxin-blog/p/5719598.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237819
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!