小光和Kimi建议创建线程应该用_beginThreadex,ripple里面就是用的这个。
花了老半天才把createThread改成_beginThreadex,例子如下:
//sipvoiplink.h
class SIPVoIPLink
{
private:
static unsigned __stdcall ReceivingThrd(void * pParam);
}
//sipvoiplink.cpp
#include <Winsock2.h>
#include <process.h>
bool SIPVoIPLink::init()
{
......
HANDLE hThread;
unsigned threadID;
hThread = (HANDLE)_beginthreadex( NULL, 0, &SIPVoIPLink::ReceivingThrd, (LPVOID)this, 0, &threadID );
if(hThread == NULL)
return false;
}
unsigned __stdcall SIPVoIPLink::ReceivingThrd(void * pParam)
{
//getEvent();
((SIPVoIPLink *)pParam)->getEvent();
return 0;
}
unsigned long _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr );
//第1个参数:安全属性,NULL为默认安全属性
//第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0
//第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址)
//第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,在线程函数中再转化为对应类的指针
//第5个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)
//第6个参数:用于记录线程ID的地址
一个线程的好例子:http://www.cppblog.com/mzty/archive/2007/07/25/28756.html
转自:http://hi.baidu.com/qinpc/blog/item/5aaa8b54918e541b3a2935ee.html