CreateThread如何在主线程中创建新线程并分配资源?

如题所述

在Windows系统中,当通过CREATEPROCESS调用启动新进程时,通常会伴随着一个主线程的创建。然而,如果你需要在主线程内创建额外的执行线程,CreateThread函数就派上用场了。这个函数执行的过程大致如下:



    内核对象管理:首先,内核会在其中分配一个线程标识或句柄,这个标识符是用于后续线程管理和跟踪的,CreateThread函数会返回这个标识。
    初始化状态:线程的退出码被初始化为STILL_ACTIVE,同时挂起计数器被设置为1,表示线程尚未开始执行。
    上下文结构:接着,系统会为新线程分配一个context结构,这个结构用于存储线程运行时的上下文信息。
    物理存储:为了支持线程执行,系统为其分配两页的物理存储空间,其中一页的保护级别设置为PAGE_READWRITE,用于栈的动态扩展,第二页设置为PAGE_GUARD,用于防止内存碎片和保护代码区域。
    参数传递:函数的参数,lpStartAddr和lpvThread,会被放置在栈的顶部,以便在StartOfThread函数中作为参数使用。
    上下文设置:最后,context结构的栈指针被设置为指向栈顶,而指令指针则指向startOfThread函数,准备线程开始执行。

微软文档中,CreateThread函数的原型定义如下:


HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
温馨提示:答案为网友推荐,仅供参考
相似回答