"Windows线程生灭:创建、管理与优化探究"
版权申诉
5 浏览量
更新于2024-02-18
收藏 362KB PDF 举报
Windows线程在创建时会首先创建一个线程内核对象,这个对象是一个较小的数据结构,操作系统通过它来管理线程。新线程可以访问进程内核对象的所有句柄、进程中的所有内存及同一进程中其它线程的栈。线程的创建可以通过多种方式实现,其中包括操作系统提供的CreateThread(),_beginthread()和_beginthreadex(),以及MFC提供的AfxBeginThread()接口。
CreateThread()是操作系统提供的函数,通过它可以创建一个线程。其原型为HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId),其中lpThreadAttributes用于设置线程的安全属性,dwStackSize设置线程栈的大小,lpStartAddress指定线程的入口函数,lpParameter传递给线程的参数,dwCreationFlags指定线程的创建标志,lpThreadId返回新线程的ID。
_beginthread()是C标准库提供的函数,用于创建一个线程。其原型为uintptr_t _beginthread(void(*start_address)(void*), unsigned stack_size, void* arglist),其中start_address指定线程的入口函数,stack_size指定线程的栈大小,arglist传递给线程的参数。_beginthread()函数的特点是可以在MSVC编译器下使用,但在其他编译器不一定有效。
_beginthreadex()是C标准库提供的函数,类似于_beginthread(),用于创建一个线程。其原型为unsigned int _beginthreadex(void* security, unsigned stack_size, unsigned(__stdcall*start_address)(void*), void* arglist, unsigned initflag, unsigned* thrdaddr),其中security用于设置线程的安全属性,stack_size设置线程栈的大小,start_address指定线程的入口函数,arglist传递给线程的参数,initflag指定线程的初始化标志,thrdaddr返回新线程的地址。
AfxBeginThread()是MFC框架提供的函数,用于创建一个线程。其原型为CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority, UINT nStackSize, DWORD dwCreateFlags, LPSECURITY_ATTRIBUTES lpSecurityAttrs),其中pfnThreadProc指定线程的入口函数,pParam传递给线程的参数,nPriority指定线程的优先级,nStackSize设置线程栈的大小,dwCreateFlags指定线程的创建标志,lpSecurityAttrs设置线程的安全属性。AfxBeginThread()函数的特点是可以在MFC应用程序中使用,方便管理和控制线程。
总之,在Windows系统中,线程的创建是基于线程内核对象来管理的,可以通过操作系统提供的CreateThread()函数、C标准库提供的_beginthread()和_beginthreadex()函数,以及MFC提供的AfxBeginThread()函数来创建线程。不同的函数有不同的特点和适用范围,开发人员可以根据实际需求选择合适的方式来创建线程,提高程序的并发性能和效率。
点击了解资源详情
697 浏览量
点击了解资源详情
112 浏览量
2021-10-23 上传
2021-10-11 上传
138 浏览量
czq131452007
- 粉丝: 2
- 资源: 12万+
最新资源
- MyEclipse6.0使用手册(免费版本)
- 超级实用的双面板布线技巧
- 视觉中文词汇识别的整体优先效应和词内核证原则:来自ERP的证据
- MyEclipse 6 Java 开发中文教程(01-10)
- 如何在Capture CIS配置本地元器件数据库
- 另存為按鈕.html
- ARM Cortex A8 Whitepaper
- Eclipse中文教程
- Oracle详细入门资料信息
- Oracle常用函数.txt
- 在线作业管理系统的设计与实现
- window的全部命令提示符.txt
- emacs快速指南.pdf
- Codec Engine Algorithm Creator User.pdf
- FPGA入门教程.pdf
- DIV+CSS完全解读