zoukankan      html  css  js  c++  java
  • CreateThread和_beginthread区别及使用

    CreateThread 是一个Win 32API 函数,

    _beginthread 是一个CRT(C Run-Time)函数,

    他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数列表。

     

     

    CreateThread()和_beginthreadex()在Jeffrey的《Windows核心编程》中讲的很清楚,应当尽量避免使用CreateThread()。 

    事实上,_beginthreadex()在内部先为线程创建一个线程特有的tiddata结构,然后调用CreateThread()。在某些非线程安全的CRT函数中会请求这个结构。如果直接使用CreateThread()的话,那些函数发现请求的tiddata为NULL,就会在现场为该线程创建该结构,此后调用EndThread()时会引起内存泄漏。_endthreadex()可以释放由CreateThread()创建的线程,实际上,在它的内部会先释放由_beginthreadex()创建的tiddata结构,然后调用EndThread()。 

    因此,应当使用_beginthreadex()和_endthreadex(),而避免使用CreateThread()和EndThread()。当然,_beginthread()和_endthread()也是应当避免使用的。 

     

     

    避免使用_beginthread!

    _beginthread函数在调用ExitThread之前,会调用CloseHandle,如果此时之后代码调用CloseHandle()则会失败,而_beginthreadex()不会关闭句柄,故而应当用_beginthreadex()。

     

  • 相关阅读:
    Transaction 'IREG', Abend 'APCT', at '????'.
    CICS中设置是否具有可修改性
    常用命令总结
    常用语句总结
    _func_
    数组排序返回索引-python和c++的实现
    数组的并行求和-cuda实现
    Pytorch 多GPU训练-多计算节点并行-All you need
    Pytorch 多GPU训练-单运算节点-All you need
    Windows 编程中的问题
  • 原文地址:https://www.cnblogs.com/lsh123/p/7413611.html
Copyright © 2011-2022 走看看