windows 核心编程 线程

原创 2007年09月19日 15:11:00

每个线程都有自己的一组CPU寄存器,称为线程的上下文。线程的这组CPU寄存器保存在一个CONTEXT结构中。CONTEXT结构本身则包含在线程的内核对象中。

指令指针和堆栈指针寄存器是线程的上下文中两个最重要的寄存器。记住,线程总是在进程的上下文中运行的。因此这些地址都是用于标识拥有线程的进程地址空间的内存。当线程的内核对象被初始化时,CONTEXT结构的堆栈指针寄存器被设置为线程堆栈上用来放置pfnStartAddr的地址。指令指针寄存器被置为BaseThreadStart的函数的地址。

void BaseThreadStart(PTHREAD_START_ROUTINE pfnStartAddr,PVOID pvParam)
{
 __try
 {
  ExitThread((pfnStartAddr)(pvParam));
 }
 __except(UnhandledExceptionFilter(GetExceptionInformation()))
 {
  ExitProcess(GetExceptionCode());
 }
}

当新线程执行BaseThreadStart函数的时候

1、在线程函数中建立一个结构化异常处理(SEH)帧,这样,在线程执行时产生的任何异常情况都会得到系统的默认处理

2、系统调用线程函数的时候,并将你传递给CreateThread函数的pvParam参数传给它

3、当线程函数返回的时候,BaseThreadStart调用ExitThread,并将线程函数的返回值传递给它。该线程内核对象的使用计数被递减,线程停止执行。

4、如果该线程产生一个没有处理的异常条件,由BaseThreadStart函数建立的SEH帧将负责处理该异常条件。通常情况下,这意味着向用户显示一个消息框,并且在用户撤销

Windows核心编程学习笔记--进程和线程的优先级

线程调度、优先级和关联性  From:http://blog.csdn.net/drecik__/article/details/8095467     每个线程都有一个CONTEXT结构,保存在线...

基于visual c++之windows核心编程代码分析(12)使用信号量同步线程

我们编写多线程应用程序的时候,经常需要进行线程同步协作,我们来实践一下用信号量同步线程。请见代码实现与注释分析,/* 头文件 */ #include #include /* 常量定义 */ #de...

Windows核心编程之线程内幕

1.线程内核对象(操作系统接口CreateThread内部实现) 2.线程数据块_tiddata(C/C++运行时库的实现 _beginthreadex与_beginthread) 3.线程结束_...

Windows核心编程笔记(十七) 线程局部储存

21.1 动态TLS 21.1.1 为什么要使用线程局部存储   编写多线程程序的时候都希望存储一些线程私有的数据,我们知道,属于每个线程私有的数据包括线程的栈和当前的寄存器,但是这两种存...

Windows-核心编程-04-进程-获取进程 线程 模块(DLL)信息

Windows中获取进程信息. 必须创建一个快照. 你就当是一个相机. 瞬间获取所有神秘的系统内部的事物吧.  这个创建快照的API, 可以用来获得进程使用的堆、模块(DLL)、线程的信息:  Cre...

Windows核心编程Dll注入之远程线程

为了让某个进程运行我们的Dll,可以使用远程线程来达到目的。 为了达到这个目的,我们必须让该进程调用我们的Dll。怎样才能让目标进程来调用我们的DLL呢?首先不可能是隐式的,因为隐式调用Dll的名字...

Windows核心编程<读书笔记六> 线程

【文起】亲爱的,想一觉醒来了我就在你身边,爱你。 线程 1、  每个进程至少有一个线程。线程包含:1、线程内核对象;2、线程堆栈(用户维护线程执行代码时需要的所有函数参数和局部变量) 2、  线...

Windows核心编程 -- 线程基础

 一、线程   与前面介绍的进程一样,线程也有两部分组成:   1)一个线程内核对象,操作系统用它来管理线程。内核对象中还存储了线程的各种统计信息,包括挂起计数、退出代码等,以便于系统对线程...

Windows核心编程<读书笔记八>线程的同步

【文起】亲爱的蟹儿,想念你就是我坚持下去的动力。为了每天能一起喝红酒,奋斗,嘻嘻 用户方式中线程的同步 1、  当系统中的线程对同一共享资源进行读取时,就会涉及线程的同步,也就是线程间的相互通信。...

Windows核心编程学习笔记(12)--线程与进程运行的时间

Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8093724   如果是一般精度要求可以使用GetThre...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows 核心编程 线程
举报原因:
原因补充:

(最多只允许输入30个字)