孙鑫多线程笔记.doc

孙鑫多线程笔记.doc

ID:61455284

大小:192.50 KB

页数:20页

时间:2021-02-01

孙鑫多线程笔记.doc_第1页
孙鑫多线程笔记.doc_第2页
孙鑫多线程笔记.doc_第3页
孙鑫多线程笔记.doc_第4页
孙鑫多线程笔记.doc_第5页
资源描述:

《孙鑫多线程笔记.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、孙鑫VC学习笔记:多线程编程=================================================================================程序&进程&线程=================================================================================·程序&进程程序计算机指令的集合,它以文件的形式存储在磁盘上进程通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动区别:进程是资源

2、申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立的运行的单位, 因此,他不占用系统的运行资源。·进程由两个部分组成: 1、操作系统用来管理进程的内核对象。内核对象是操作系统内部分配的一个内存块,内核对象也是系统用来存放关于进程的统计信息的地方。 2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。他还包含动态内存分配的空间。如线程堆栈和堆分配空间。内核对象:是操作系统内部分配的一个内存块,它是一种只能被内核访问的数据结构, 其成员负责维护该对象的各种信息

3、,应用程序无法找到并直接改变它们的内容,只能通过Windows提供的函数对内核对象进行操作。·进程进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。单个进程可能包含若干个线程,这些线程都“同时”执行进程地址空间中的代码。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的一个线程,称为主线程。此后,该线程可以创建其他的线程·线程线程有两个部分组成: 1。线程的内核

4、对象,操作系统用它来对线程实施管理,内核对象也是系统用来存放线程统计信息的地方。 2。线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。线程总是在某个进程环境中创建。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的

5、所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易的互相通信。线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程。·线程运行对于单个CPU操作系统为每一个运行线程安排一定的CPU时间——时间片。系统通过一种循环的方式为线程提供时间片,线程在自己的时间内运行,因时间片相当短,因此,给用户的感觉,就好像线程是同时进行的一样。如果计算机拥有多个CPU,线程就能真正意义上运行了·注意 我们可以用多进程代替多线

6、程,但是这样不是明智的,因为 1.每新建一个进程,系统要为之分配4GB的虚拟内存,浪费资源;而多线程共享同一个地址空间,占用资源较少 2.在进程之间发生切换时,要交换整个地址空间;而线程之间的切换只是执行环境的改变,效率较高。 =================================================================================线程的创建=================================================================

7、================·实例着手=================================================================================·实例1#include"windows.h"#include"iostream"usingnamespacestd;DWORDWINAPIFun1Proc(LPVOIDlpParameter);//声明线程入口函数voidmain(){//创建新线程HANDLEhThread1;hThread1=CreateThread(

8、NULL,//使用缺省的安全性0,//初始提交的栈的大小Fun1Proc,//线程入口函数NULL,//传递为线程的参数0,//附加标记 0表示线程创建后立即运行NULL);//线程ID//关闭线程句柄,但不会终止新建的线程CloseHandle(hThread1);cout<<"main

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。