2022年C++多线程编程入门小结 .pdf





《2022年C++多线程编程入门小结 .pdf》由会员分享,可在线阅读,更多相关《2022年C++多线程编程入门小结 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、前几天搞定了C+ 的多线程编程,今天闲来无事小做总结!【线程的概念】为了了解线程的概念,我们必须先讨论一下进程的概念。一个进程通常定义为程序的一个实例。在Win32中, 进程占据 4GB 的地址空间。与它们在MS-DOS和 16 位 Windows操作系统中不同,Win32进程是没有活力的。这就是说,一个 Win32进程并不执行什么指令,它只是占据着4GB的地址空间, 此空间中有应用程序EXE文件的代码和数据。 EXE 需要的任意DLL也将它们的代码和数据装入到进程的地址空间。除了地址空间,进程还占有某些资源,比如文件、动态内存分配和线程。当进程终止时,在它生命期中创建的各种资源将被清除。但是
2、进程是没有活力的,它只是一个静态的概念。为了让进程完成一些工作,进程必须至少占有一个线程,所以线程是描述进程内的执行,正是线程负责执行包含在进程的地址空间中的代码。实际上,单个进程可以包含几个线程,它们可以同时执行进程的地址空间中的代码。为了做到这一点,每个线程有自己的一组CPU 寄存器和堆栈。每个进程至少有一个线程在执行其地址空间中的代码,如果没有线程执行进程 地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间。 为了运行所有这些线程,操作系统为每个独立线程安排一些CPU 时间,操作系统以轮转方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。创建一个
3、Win32进程时,它的第一个线程称为主线程,它由系统自动生成,然后可由这个主线程生成额外的线程,这些线程,又可生成更多的线程。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 【多线程编程的步骤】1、编写线程函数所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型:DWORDWINAPIYourThreadFunc(LPVOIDlpvThreadParm); 该函数输入一个LPVOID 型的参数, 可以是一
4、个DWORD型的整数,也可以是一个指向一个缓冲区的指针,返回一个DWORD型的值。 象 WinMain函数一样,这个函数并不由操作系统调用,操作系统调用包含在KERNEL32.DLL 中的非C 运行时的一个内部函数,如StartOfThread,然后由 StartOfThread函数建立起一个异常处理框架后,调用我们的函数。以下代码为两个线程函数:void FunCount(PVOID arg) while(1) printf(funcout is executing.n); Sleep(10000); void Function1(PVOID arg) 名师资料总结 - - -精品资料欢迎下
5、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - while(1) printf(function1 is executing.n); Sleep(20000); 2、创建一个线程一个进程的主线程是由操作系统自动生成,如果你要让一个主线程创建额外的线程,你可以调用来CreateThread完成。 HANDLECreateThread(LPSECURITY_ATTRIBUTES lpsa,DWORDcbstack,LPTHREAD_START_ROUTINElpStar
6、tAddr, LPVOID lpvThreadParm,DWORDfdwCreate,LPDWORDlpIDThread); 其中 lpsa 参数为一个指向SECURITY_ATTRIBUTES 结构的指针。如果想让对象为缺省安全属性的话,可以传一个NULL , 如果想让任一个子进程都可继承一个该 线 程 对 象 句 柄 , 必 须 指 定 一 个SECURITY_ATTRIBUTES结 构 , 其 中bInheritHandle成员初始化为TRUE。参数 cbstack表示线程为自己所用堆栈分配的地址空间大小,0 表示采用系统缺省值。参数 lpStartAddr用来表示新线程开始执行时代码所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C+多线程编程入门小结 2022 C+ 多线程 编程 入门 小结

限制150内