首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

_beginthreadex 传递了一个参数,线程函数里应该如何用这个参数呢

2012-02-26 
_beginthreadex 传递了一个参数,线程函数里应该怎么用这个参数呢?参数是一个结构体structABC{inta}ABCab

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

热点排行