1.创建线程时先判断线程是否已经被创建或者运行,代码:
if (m_hThreadHandle==NULL) return false;
if (WaitForSingleObject(m_hThreadHandle,0)!=WAIT_TIMEOUT) return false;
关于函数WaitForSingleObject,请参考链接:点击打开链接
这其中涉及到线程信号的概念:如果线程结束,则有信号,线程在运行,则没有信号。
2.创建线程,调用函数_beginthreadex,判断通过句柄线程是否创建成功
<span style="white-space:pre"> </span>tagThreadParameter ThreadParameter;
ZeroMemory(&ThreadParameter,sizeof(ThreadParameter));
//设置变量
ThreadParameter.bSuccess=false;
ThreadParameter.pServiceThread=this;
ThreadParameter.hEventFinish=CreateEvent(NULL,FALSE,FALSE,NULL);
//效验状态
ASSERT(ThreadParameter.hEventFinish!=NULL);
if (ThreadParameter.hEventFinish==NULL) return false;
//启动线程
m_bRun=true;
m_hThreadHandle=(HANDLE)::_beginthreadex(NULL,0,ThreadFunction,&ThreadParameter,0,&m_uThreadID);
3.结束线程,关闭句柄,设置线程ID = 0。
//等待事件
WaitForSingleObject(ThreadParameter.hEventFinish,INFINITE);
CloseHandle(ThreadParameter.hEventFinish);
4.线程执行函数:OnEventThreadRun()中增加while(true)死循环,处理响应的线程模块逻辑。