请教线程结束的一些问题

nana_aoe_2013 2011-07-20 12:07:20
线程关闭时,看到有函数
1.ExitThread()
2.closeHandle()
有什么区别吗?ExitThread中的参数 退出码 是如何定义的?

我使用GetExitCodeThread获取一个正常运行线程的退出码是259(我用%d打印出来的),看到大家写的多是一些宏定义,这些在什么地方定义的?为什么会是269而不是其他值呢?

我在线程中使用return 0;也使线程退出了,此时的退出码是0 ,

我是否可以使用GetExitCodeThread来检测一个线程的状态,看网上有些人说这样不够全面,不是很懂,请高手解释一下。
...全文
71 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwh5635 2011-07-21
  • 打赏
  • 举报
回复
每个进程都是在操作系统内部有资源的,closehandle则是清除资源的引用计数,不能控制你的线程结束之前你可以closehandle 但是他不能把进程或者线程结束,只是消除了引用计数。在线程结束后就把资源释放,同样的,当你线程结束后没有closehandle,在进程退出前一样不会释放资源。。。
退出码嘛,数字的意义其实是自己定义的,比如你自己新建一个线程,如果退出口不止一个的话,就可以自己定义一个表,一般0都是Exit_Success,如果用系统定义的就是系统定义的值,一切都在你的那个运行的线程函数里面return~
nana_aoe_2013 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wltg2001 的回复:]

我使用GetExitCodeThread获取一个正常运行线程的退出码是259(我用%d打印出来的),看到大家写的多是一些宏定义,这些在什么地方定义的?为什么会是269而不是其他值呢?
============
关于GetExitCodeThread得到的退出码,在MSDN上有明确的说明,对于没有退出的线程,它得到是STILL_ACTIVE,也就是259,这个是系统头文件中通过宏定义定义的,具……
[/Quote]

关于退出码能详细解释一下吗?
比如说:exit(0)和Exit(1)有什么区别?

最后谢谢你的帮助,祝你工作愉快,全家幸福。
nana_aoe_2013 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]

1.ExitThread()
2.closeHandle()
有什么区别吗?ExitThread中的参数 退出码 是如何定义的?
===========
ExitThread是结束线程,而CloseHandle并不是结束线程,它只是关闭句柄,你关闭了一个线程句柄并不一定就结束了这个线程,只是减小了这个线程句柄的引用计数。
[/Quote]

新建线程句柄的引用次数是几,closeHandle(),是否通过减少引用计数来释放句柄空间呢?
nana_aoe_2013 2011-07-20
  • 打赏
  • 举报
回复
自己先顶起来
buyong 2011-07-20
  • 打赏
  • 举报
回复
如果你用mfc,最简单的事AfxBeginThread,然后你不用管线程结束的事了,mfc就都帮你做了。
wltg2001 2011-07-20
  • 打赏
  • 举报
回复
我使用GetExitCodeThread获取一个正常运行线程的退出码是259(我用%d打印出来的),看到大家写的多是一些宏定义,这些在什么地方定义的?为什么会是269而不是其他值呢?
============
关于GetExitCodeThread得到的退出码,在MSDN上有明确的说明,对于没有退出的线程,它得到是STILL_ACTIVE,也就是259,这个是系统头文件中通过宏定义定义的,具体在哪个头文件中就不知道了。
对于已经退出的线程,GetExitCodeThread得到的退出码一般是线程函数的返回值,比如你在线程函数的最后写作:return 1,那么GetExitCodeThread就会得到1,如果你是用ExitThread退出线程的,那么GetExitCodeThread得到的是ExitThread指定的值,比如你用ExitThread(3);退出线程的,那么GetExitCodeThread得到的就是3,用TerminateThread退出线程也是一样的。
wltg2001 2011-07-20
  • 打赏
  • 举报
回复
1.ExitThread()
2.closeHandle()
有什么区别吗?ExitThread中的参数 退出码 是如何定义的?
===========
ExitThread是结束线程,而CloseHandle并不是结束线程,它只是关闭句柄,你关闭了一个线程句柄并不一定就结束了这个线程,只是减小了这个线程句柄的引用计数。
priest334 2011-07-20
  • 打赏
  • 举报
回复
ExitThread结束线程, GetExitCodeThread返回的值,就是ExitThread中的参数值
CloseHandle减少HANDLE引用计数,当HANDLE引用计数为0时,HANDLE从系统中删除,CloseHandle并不结束线程
线程函数退出时,线程结束, GetExitCodeThread得到的值就是线程函数return的值,一般可以根据线程退出返回的值判断线程是否正常结束,还是非法结束,当然这个值需要你自己去定义

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧