核心对象计数器的问题

ff5dq4 2007-05-03 06:57:40
创建一个线程就会创建相应的核心对象,其中核心对象的计数器为1
使用closehandle 会使计数器减1

那为什么下面程序在创建线程后 马上用closehandle关闭 ,却没有被销毁

#include <windows.h>
#include <iostream.h>

DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);


int index=0;
int tickets=100;
HANDLE hMutex;
void main()
{
HANDLE hThread1;
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
//创建了线程,,同时使核心对象计数器为1
CloseHandle(hThread1);
//关闭句柄 计数器-1 :为0 //计数器为0了应该销毁线程了
// 为什么线程还能运行

while(index++<1000)
cout<<"1"<<endl;

}

DWORD WINAPI Fun1Proc(
LPVOID lpParameter
)
{
while(index++<1000)
cout<<"2"<<endl;;
}
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
watertung 2008-10-25
  • 打赏
  • 举报
回复
学习了
ff5dq4 2007-05-06
  • 打赏
  • 举报
回复
谢谢
g20044111 2007-05-05
  • 打赏
  • 举报
回复
其实在你执行后 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);

线程的内核对象的计数器为2 (为什么是2 可参看《windows 核心编程》这本书,里面讲得很清

楚)
ff5dq4 2007-05-03
  • 打赏
  • 举报
回复

但是一个线程的内核对象在它的计数器为0的时候将被释放

请问我上面的程序释放了内核对象码?

内核对象被释放了 进程也不会结束码?
zhi_liu6 2007-05-03
  • 打赏
  • 举报
回复
msdn写得很清楚:

Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, and then close all handles to the thread.

不会结束线程

15,466

社区成员

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

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