在MSDN的示例中,线程函数结束都有
_endthreadex( 0 );
return
0;
以前,我一直不加_endthreadex( 0 ),因为觉得它很丑很冗余,MSDN上如是说:
_endthread or
_endthreadex is called automatically when the thread returns from the routine
passed as a parameter.
也就是它屁用没有,假如我写成
_endthreadex( 0 );
return
1;
还会引起歧义。
今日我一时兴起,在return前加上了 _endthreadex( 0
),然后就报内存泄露,因为它中止线程前不会析构局部变量。
于是将代码改为
unsigned __stdcall foo( void* p
)
{
{
这里是执行代码
}
_endthreadex( 0 );
return 0;
}
也就是加了个似乎没用的{}。
阅读(4860) | 评论(2) | 转发(0) |