句柄应该在什么时候关闭? 100分相送!

lfzheng 2003-03-25 09:48:10
请问,在线程执行函数中,能够关闭此线程句柄吗?如果不能,应该在何处关闭句柄?

例:
BOOL Calarm::StartThread() //创建线程
{
HThread = CreateTread(0, 0,
(LPTHREAD_START_ROUTINE)Excution,
0, 0, &id);
}

Dword CAlarm::Excution(LPDWORD param) //线程的执行函数
{
if (nRunning)
{

DoSomething( );
return 1;
}
}


void CAlarm ::DoSomething( ) //调用函数
{
CloseHandle( HThread); //在这里关闭函数句柄,可以吗?
}



...全文
206 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wos 2003-03-28
  • 打赏
  • 举报
回复
这端时间好忙,来报个到!^_^
CloseHandle();
NowCan 2003-03-28
  • 打赏
  • 举报
回复
关闭这个句柄后就不能用TerminateThread了。
zharP 2003-03-27
  • 打赏
  • 举报
回复
一般就是建立线程之后就可以关闭句柄了,只要以后不会使用到这个句柄

关闭句柄并不会影响线程执行
SeekTruth 2003-03-27
  • 打赏
  • 举报
回复


CloseHandle(CreateThread(..))
ZouMorn 2003-03-27
  • 打赏
  • 举报
回复
我觉得该句柄完全可以不用关闭。
Gladstone 2003-03-26
  • 打赏
  • 举报
回复
最好在你刚创建完内核对象(包括线程,进程,事件等等)就立即调用
CloseHandle(HANDLE h)关闭该句柄,防止因遗忘而疏忽关闭它,造成内存泄漏。
当然,这些并不是必须的,因为在程序结束时,OS会把这一切处理得很完美。
但作为程序员,我想应该让自己的程序看上去无懈可击,不留任何遗憾,自己的感觉会
越来越好。
webber84 2003-03-26
  • 打赏
  • 举报
回复
操作系统用一个线程内核对象来管理线程,一个句柄就标识了一个内核对象,你只有通过这个句柄才能访问线程。内核对象有一个引用计数,表明当前有多少句柄关联到这个内核对象,当该计数为0时,系统就会销毁这个对象。CloseHandle的作用就是关闭一个句柄,使用线程内核对象的引用计数减一。注意只是引用计数减一,不会关闭你创建的线程。所以,如果你创建了一个线程并且不会再去访问它,就可以立即调用CloseHandle,这不会对线程运行有任何影响;当线程运行完毕以后,你应该调用CloseHandle(如果以前没有调用过的话),否则线程内核对象的引用计数仍大于0,系统仍然会保留它(即使你已经不会再去访问它了),这显示会造成一些内存的浪费。
maoxianwang 2003-03-25
  • 打赏
  • 举报
回复
关闭线程句柄并不能终止关联的线程,你必须调用TerminateThread()终止线程

或在线程里设一标志让它return都可以的
fbmsf 2003-03-25
  • 打赏
  • 举报
回复
什么时候关都没有什么关系,我一般是键立了的下一条语句就关了
mahatma_cn 2003-03-25
  • 打赏
  • 举报
回复
关闭线程句柄并不能终止关联的线程,你必须调用TerminateThread()终止线程

15,471

社区成员

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

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