windows核心编程之线程补充
来源:互联网 发布:税务师含金量知乎 编辑:程序博客网 时间:2024/05/18 00:05
我们来看下着张结构图
CreateThread函数创建内核对象
SP:堆栈指针寄存器
IP:指令指针寄存器(这里待会做详细讲解)
其他CPU寄存器:存放其他若干数据的寄存器
使用次数:至少为1,若打开了线程内核对象,则使用计数会加1
暂停计数:若创建线程的时候使用了CREATE_SUSPEND,则计数从1开始,每次使用SuspendThread都会时暂停计数加1,如果暂停计数为2,那么你就需要使用ResumeThread两次,让暂停计数变为0,才能让该线程处于可调度状态,这样,系统才会为该线程分类CPU时间片
退出代码:用来表明线程是活跃状态还是退出状态
已通知:这个标志一般用于等待函数,比如waitforsingleobject
大多数东西我已经说过,今天要说的是IP指针,你以为这个IP指针存放的是线程函数的地址吗,不是,它存放的是一个BaseThreadStart(未文档化)函数的指针(给这个函数传值的方法时压栈),然后把CreateThread的pvParam参数写入线程的栈中,然后把CreateThread的pfnStartAddr的线程函数地址写入栈中(PS:其实这也是绝大多数函数传递参数的方法)
也就是说,所有的线程(主线程除外)都是从BaseThreadStart开始执行的,主线程的真正的起始执行函数也不是它本身,也是类似于BaseThreadStart的函数
伪代码
void BaseThreadStart(PTHREAD_STRAT_ROUTINE pfnStartAddr,PVOID pvParam){ __try { ExitThread((pfnStartAddr)(pvParam)); } __except(UnhandledExceptionFilter(GetExceptionInformation())) { ExitProcess(GetExceptionCode()); }}
ExitThread函数等待线程函数返回
这个函数主要是创建了一个结构化异常处理帧,可以对任何情况进行默认处理,同时,保证发生异常时,退出运行(ExitProcess)
阅读全文
0 0
- windows核心编程之线程补充
- Windows核心编程之线程
- windows核心编程之线程
- Windows 核心编程之线程局部存储
- windows核心编程之进程&线程
- Windows核心编程之线程创建
- Windows核心编程之线程内幕
- Windows核心编程之线程终结
- 《Windows核心编程》之“线程栈”
- 《Windows核心编程》之“线程基础”
- 《Windows核心编程》之“线程池”
- windows核心编程--线程
- windows 核心编程 线程
- windows核心编程--线程
- windows核心编程--线程
- Windows核心编程--线程
- windows核心编程--线程高级
- windows核心编程--线程池
- 数据结构中前缀表达式、中缀表达式、后缀表达式
- C语言实现 静态顺序表
- Spring 开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别
- java多线程之闭锁(Latch)和栅栏(CyclicBarrier)
- BaseLasyFragment
- windows核心编程之线程补充
- OpenGL SuperBible阅读笔记
- log4j.xml
- SHA-2
- Java IO体系架构图
- 外网iPhone手机访问局域网电脑共享文件的方法
- C++ _T()函数和_L()函数介绍
- Android 获取应用总大小
- Java学习(2)_选择,循环,方法