windows 核心编程 线程

每个线程都有自己的一组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 编程
上一篇windows核心编程 十年磨剑
下一篇windows 核心编程 线程的优先级
想对作者说点什么? 我来说一句

Windows 核心编程

2009年04月20日 3.02MB 下载

windows应用程序捆绑核心编程

2009年08月04日 549KB 下载

windows 核心编程

2013年04月25日 3.03MB 下载

windows 核心编程 源码

2009年05月20日 655KB 下载

没有更多推荐了,返回首页

关闭
关闭