"Windows线程生灭:创建、管理与优化探究"
版权申诉
18 浏览量
更新于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()函数来创建线程。不同的函数有不同的特点和适用范围,开发人员可以根据实际需求选择合适的方式来创建线程,提高程序的并发性能和效率。
2021-10-23 上传
2021-10-11 上传
2021-09-30 上传
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
czq131452007
- 粉丝: 2
最新资源
- 批处理命令入门教程:简单易懂的CMD操作指南
- Windows XP系统命令大全
- 在Windows XP上安装Cygwin的详细指南
- 精通Adobe Flex 2:实战指南
- C++进阶指南:告别C习惯,拥抱C++特性
- USB嵌入式学习笔记:架构与总线详解
- C#与SQLServer实现的学生学籍管理系统
- C#与SQL Server驱动的学生学籍管理系统优化论文
- Struts实战:国际化编程详解
- Struts实战:国际化编程详解
- TRIMBLE5700RTK操作指南:武汉天宝耐特科技
- 嵌入式Linux进程控制开发详解
- 数据库系统实验与课程设计详解
- ASP连接Access基础教程:函数应用详解
- OpenSymphony Webwork2 开发指南
- 快速入门eVC4.0环境:构建WINCE程序