最近看《Windows核心编程》,建立线程最好是用_beginthreadex,退出线程相对的用_endthreadex.这样在结束线程时会将数据块也直接删除掉。
但在Windows CE中只能够用CreateThread函数。用的时候这里出现问题了,
//回调函数定义
UINT WINAPI CCTestCreateThreadDlg::SocketThreadProc(LPVOID pParam)
{
CCTestCreateThreadDlg* pThis = reinterpret_cast<CCTestCreateThreadDlg*>( pParam );
_ASSERTE( pThis != NULL );
pThis->Run(); //为了调用CCTestCreateThreadDlg中的Run函数强制转换了this指针
return 1L;
} // end SocketThreadProc
//类中的回调函数声明
static UINT WINAPI SocketThreadProc(LPVOID pParam);
//开启线程
HANDLE hThread=NULL;
UINT uiThreadId=0;
hThread = CreateThread(NULL, // Security attributes
0, // stack
SocketThreadProc, // Thread proc
this, // Thread param
CREATE_SUSPENDED, // creation mode
&uiThreadId); // Thread ID
return TRUE; // return TRUE unless you set the focus to a control
}
结果编译时有如下错误,'CreateThread' : cannot convert parameter 3 from 'unsigned int (void *)' to 'unsigned long (__stdcall *)(void *)'
查了半天,原来是函数入口地址必需这样写,(LPTHREAD_START_ROUTINE)SocketThreadProc
结果又报另外的错,'CreateThread' : cannot convert parameter 6 from 'unsigned int *' to 'unsigned long *'
太郁闷,只好把UINT uiThreadId=0;给改成DWORD dwThreadId=0;这样才把问题都给解决了,居然这都转换不了,看来每个细节的东西都要仔细把握阿!以后要更加仔细、认真