-
-
[求助]如何有效的关闭有循环操作线程的内核对象
-
发表于: 2009-12-9 12:01 3438
-
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等待结束,因为同一时间还需要其他的操作)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: