核心对象计数器的有关问题
核心对象计数器的问题
创建一个线程就会创建相应的核心对象,其中核心对象的计数器为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;;
}
------解决方案--------------------
其实在你执行后 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
线程的内核对象的计数器为2 (为什么是2 可参看《windows 核心编程》这本书,里面讲得很清
楚)
创建一个线程就会创建相应的核心对象,其中核心对象的计数器为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;;
}
------解决方案--------------------
其实在你执行后 hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
线程的内核对象的计数器为2 (为什么是2 可参看《windows 核心编程》这本书,里面讲得很清
楚)