createthread和beginthread句柄数只增不降

由于中继服务器句柄增加,随带测试了创建线程句柄数量的问题

1  调用API :createthread,closehandle
   线程函数 :func{printf} 
   执行次数 :1
   结果:       句柄 为10
 
2  调用API :createthread,closehandle
   线程函数 :func{printf} 
   执行次数 :2,200,20000
   结果:       句柄 为10,11,12(相同执行次数,句柄也会不同,但在这三值浮动,为固定值)
 
 
3  调用API :createthread,closehandle
   线程函数 :func{}         //注这里空函数
   执行次数 :2,200,20000
   结果:       和2差不多
 
 
4  调用API :_beginthread
   线程函数 :func{} 
   执行次数 :1,2
   结果:       句柄都为 10
 
 
5  调用API :_beginthread
   线程函数 :func{} 
   执行次数 :20
   结果:       句柄 11
 
6 调用API :_beginthread
   线程函数 :func{} 
   执行次数 :20000
   结果:       句柄 13,14    

结果来看,就算closehandle或者它自己将引用计数减一,句柄数并一定会随着减少到相应值,而
是保持在一个范围.不过应该没啥关系~~
后记:在msdn看到_beginthread如下的话
It is safer to use _beginthreadex than _beginthread . If the thread spawned by _beginthread exits quickly, the handle returned to the caller of _beginthread may be invalid or, worse, point to another thread. However, the handle returned by _beginthreadex has to be closed by the caller of _beginthreadex , so it is guaranteed to be a valid handle if _beginthreadex did not return an error.

从这句话来看前面句柄数不稳定,或者会上升在于线程函数执行过快,返回的句柄有可能无效导致的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`_beginthread` 和 `CreateThread` 都是用于创建线程的函数,但它们在使用上有一些区别。 `_beginthread` 是C/C++标准库中的函数,用于创建一个新的线程。它的原型如下: ```c++ uintptr_t _beginthread(void (__cdecl *start_address)(void*), unsigned stack_size, void* arglist); ``` 其中,`start_address` 是线程函数的地址,`stack_size` 是线程堆栈的大小,`arglist` 是传递给线程函数的参数。`_beginthread` 函数会创建一个新的线程,并在该线程中执行指定的线程函数。 而 `CreateThread` 是Windows API中的函数,用于创建一个新的线程。它的原型如下: ```c++ HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); ``` 其中,`lpThreadAttributes` 是线程的安全属性,`dwStackSize` 是线程堆栈的大小,`lpStartAddress` 是线程函数的地址,`lpParameter` 是传递给线程函数的参数,`dwCreationFlags` 是线程创建的标志,`lpThreadId` 是用于接收新线程ID的指针。`CreateThread` 函数会创建一个新的线程,并在该线程中执行指定的线程函数。 两者的区别主要在于: - `_beginthread` 是C/C++标准库中的函数,而 `CreateThread` 是Windows API中的函数。 - `_beginthread` 创建的线程会自动终止,而 `CreateThread` 创建的线程需要手动调用 `ExitThread` 函数来终止。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值