• 线程的基本知识


    _beginthreadex的一些要点
    1.每个线程均获得c/c++运行时库的栈分配的自己的tiddata内存结构
    2.传递给_beginthreadex的线程函数的地址和参数保存在tiddata内存块中
    3._beginthreadex从内部调用CreateThread,因为这是操作系统内部了解如何创建新线程的唯一方法
    4.调用CreatedThread时,被告知调用_threadstartex而不是pfnStartAddr来启动执行新线程,传递给线程函数的参数是tiddata而不是pvParam

    _threadstartex函数的一些要点
    1.新线程开始从BeginthreadStart函数执行,然后转移到_threadstartex
    2.到达该新线程的tiddata块的地址作为其唯一参数被传递给_threadstartex
    3.TlsSetValue是个操作系统函数,负责将一个值与调用线程联系起来
    4.一个SEH帧被放置在需要的线程函数周围,该帧负责处理与运行时库相关的许多事情
    5.调用必要的线程函数,传递必要的参数
    6.必要的线程函数返回值,被认为是线程的退出代码

    _endthreadex的一些要点
    1._getptd函数内部调用操作系统的TlsGetValue函数,该函数负责调用线程的tiddata内存块的地址
    2.然后释放这个数据块,调用操作系统的ExitThread函数

  • 相关阅读:
    MySQL 数据库改名的简单方法
    Apache启用Gzip压缩
    安全的Web主机iptables防火墙脚本
    iptables
    Linux服务器维护统计连接数查看外部IP
    面试相关(新)
    hdu 4946 Area of Mushroom (凸包,去重点,水平排序,留共线点)
    凸包全解
    eclipse (android环境搭建)
    wins 软件安装
  • 原文地址:https://www.cnblogs.com/debug-me/p/6538023.html
Copyright © 2020-2023  润新知