读书人

_beginthreadex 传递了一个参数线程

发布时间: 2012-02-26 20:19:45 作者: rapoo

_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出来的参数,就不用担心参数被最后一次传递的所覆盖。

读书人网 >VC/MFC

热点推荐