Chinaunix首页 | 论坛 | 博客
  • 博客访问: 987907
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-26 15:45:40

在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) |
1

上一篇:求 a的b次方对c求余 的结果

下一篇:暂存

给主人留下些什么吧!~~

网友评论2012-11-26 15:46:19

nscboy
不知道再加一层函数进行包装是否有用.
如果还是不行的话,估计要做的事情也只有所有对象都在线程启动前创建.在线程终止后手工清除了.

网友评论2012-11-26 15:46:10

sjdev
是调用的时候可能导致内存泄露?幸好我一直没调它.