首页
社区
课程
招聘
[求助]如何有效的关闭有循环操作线程的内核对象
发表于: 2009-12-9 12:01 3342

[求助]如何有效的关闭有循环操作线程的内核对象

2009-12-9 12:01
3342
unsigned int __stdcall myThreadFun(LPVOID lpParameter)
{
	for(int i=0;i<10;i++)
	{	
		printf("%d\n", 2);
		Sleep(1000);
	}	
	return 0;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	for(int i=0;i<5;i++)
	{
		HANDLE myHH = (HANDLE)_beginthreadex(NULL, 0, myThreadFun, NULL, 0, 0);
		CloseHandle(myHH);
		printf("myHH:%d\n", myHH);
		Sleep(1000*2);
	}

	getchar();
	return 0;
}

这段代码在运行后内核对象的计数只会增加,不会减少。但是如果修改成
unsigned int __stdcall myThreadFun(LPVOID lpParameter)
{
// 	for(int i=0;i<10;i++)
// 	{	
// 		printf("%d\n", 2);
// 		Sleep(1000);
// 	}	
	printf("%d\n", 2);
	return 0;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	for(int i=0;i<5;i++)
	{
		HANDLE myHH = (HANDLE)_beginthreadex(NULL, 0, myThreadFun, NULL, 0, 0);
		CloseHandle(myHH);
		printf("myHH:%d\n", myHH);
		Sleep(1000*2);
	}

	getchar();
	return 0;
}

就没有问题了。
像这样对于第一种情况,一个有循环操作的线程,如何再完成线程以后有效的关闭内核对象呢?
(不能用WaitForSingleObject等待结束,因为同一时间还需要其他的操作)

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//