_beginthreadex 传递了一个参数,线程函数里应该怎么用这个参数呢?
参数是一个结构体
struct ABC{
int a;
};
ABC abc;
abc.a=1;
_beginthreadex(xx,xx,xx,(LPVOID)abc ,xx,xx);
这样传递了之后,线程里怎么把这个转换出来呢?
unsigned __stdcall threadFunc(LPVOID args) {
这里怎么用这个参数?
return 0;
}
[解决办法]
一般而言,建议这么写:
struct ABC{
int a;
};
ABC *abc=new ABC;
abc-> a=1;
m_hThread=(HANDLE)_beginthreadex(xx,xx,xx,(LPVOID)abc ,CREATE_SUSPENDED,xx);
if (!m_hThread)
delete abc;
else
::ResumeThread(m_hThread);
unsigned __stdcall threadFunc(LPVOID args)
{
ABC* tempData=(ABC* )args;
if(tempData!=NULL)
{
// do............
}
delete tempData; // 这里删除
return 0;
}
这样写的好处是可以允许threadFunc线程函数被同时调用多次,即同时开启多个同名的函数线程;只要对每一个HANDLE都传递一个new出来的参数,就不用担心参数被最后一次传递的所覆盖。