创建线程,对应线程的开始地址RunProcessInPacketProc
HANDLE hThreadID = (HANDLE)_beginthreadex(NULL, 0, RunProcessInPacketProc,
&m_tdProcessInPacket,/*注意这个参数,解释:arglist Argument list to be passed to new thread or NULL(即作为参数列表的)*/
0, &(uThreadNo));
该函数的声明:
static unsigned int _stdcall RunProcessInPacketProc(LPVOID pParam);
该函数的定义:
unsigned int _stdcall COctOAPIClient::RunProcessInPacketProc(LPVOID pParam)
{
CDxWorkerThread *pThreadData = (CDxWorkerThread*)pParam;
if (pThreadData)
{
COctOAPIClient *pApiClient = (COctOAPIClient*)(pThreadData->GetParent());
/*返回成员变量m_pParent,在构造函数中传进来的;或在SetParent函数中设置的*/
if (pApiClient)
{
pApiClient->ProcessInPacketProc(pThreadData);//这个线程的重点!!执行完了就返回
} // if (pApiClient)
// Raise the event to indicate finish
//只调用了SetEvent(m_hevtDead);而已设置m_hevtDead为signaled;
//m_hevtDead:m_成员变量,h:HANDLE,evt:EVENT,Dead:Dead
pThreadData->RaiseDeadEvent();
}
//The _endthread and _endthreadex functions terminate a thread created by _beginthread or _beginthreadex, respectively
//即线程结束;显示结束,良好的风格!Welldone
_endthreadex(0);
return 0;
}
这个线程主要是执行ProcessInPacketProc这个函数;这是个很复杂的函数!