Windows多线程编程

Windows多线程编程

ID:44273835

大小:1.58 MB

页数:68页

时间:2019-10-20

Windows多线程编程_第1页
Windows多线程编程_第2页
Windows多线程编程_第3页
Windows多线程编程_第4页
Windows多线程编程_第5页
资源描述:

《Windows多线程编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第三章Windows多线程编程主要内容Windows操作系统的一些基本知识Win32API线程库线程间通信调度优先级1.Windows操作系统的一些基本知识API(ApplicationProgrammingInterface)操作系统是由本身的API定义的。API包含了所有构造操作系统的应用程序的函数调用,同时包含了相关的数据类型和结构。32位版本Windows的API被称为Win32直接用Win32API编写的应用程序,程序的执行代码小,运行效率高MFC用类库的方式将Win32API进行封装,以类的方式提供给开发者Framework类库提供了所有应用程序模型都

2、要使用的一个面向对象的API集合内核对象及句柄内核对象是由操作系统内核分配的,只能由内核访问的一个内存块,用来供系统和应用程序使用和管理各种系统资源。内核对象包括:符号对象、事件对象、文件映射对象、I/O完成端口对象、作业对象、信箱对象、互斥量、管道对象、进程对象、信标对象、线程对象和等待计时器对象等,这些对象通过调用函数来创建。不同的对象拥有不同的数据结构,它的成员负责维护该对象的各种信息。内核对象及句柄如何操作内核对象?Windows提供了一组函数,使用这组函数来访问内核对象。创建内核对象的函数,会返回一个句柄,任何线程都可以使用这个值,把这个句柄传递给Win

3、dows的各个函数,系统就知道操作哪个内核对象了。进程被初始化时,系统为它分配一个句柄表,用于保存该进程使用的内核对象的信息,而句柄值则是相应内核对象在句柄表中的索引值,因此句柄值是内存相关的。内核对象由内核拥有,各个进程可以共享内核对象。进程中止执行,它使用的内核对象并不一定会被撤销。2.Win32API的线程库2.1创建线程的基本问题线程可以由进程中的任意线程创建,而进程的主线程在进程加载时自动创建。每个线程都有自己的进入点函数。主线程的进入点函数线程函数----线程的入口点线程函数的返回值是该线程的退出代码线程函数应尽可能使用函数参数和局部变量2.2创建线程

4、的API函数当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构安全属性NULL控制创建线程标志线程ID/STACK:[reserve][commit]C/C++多线程运行期库中 线程创建函数_beginthreadex_beginthreadex函数在创建线程之前会为线程分配数据块(tiddata),并对数据块初始化,然后将数据块与线程联系起来再为线程函数建立结构异常化处理桢来处理线程函数中的异常。2.3操作线程的API暂停线程返回值是线程的前一个暂停计数线程暂停是线程内核对象的一个内部值,用于指明线程的暂

5、停计数。使用要小心,因为不知道暂停线程运行时它在进行什么操作。可能造成死锁2.3操作线程的API恢复线程返回值是线程的前一个暂停计数该函数用于将处于暂停状态的线程置于就绪状态,使其参加线程调度。2.3操作线程的API使线程睡眠该函数是线程暂自己的运行,直到睡眠时间过去为止当线程调用这个函数时,它自动放弃剩余的时间片,迫使系统进行线程调度。Windows不是实时的操作系统。2.3操作线程的API终止线程线程函数返回(最好)通过调用ExitThread函数,线程将自行撤销同一个进程或另一个进程中的线程调用TerminateThread函数包含线程的进程终止线程返回函数

6、线程中创建的C++类对象能够正常撤销操作系统将正确地释放线程堆栈使用的内存系统将线程的退出代码(线程内核对象维护)设置为线程函数的返回值系统将递减线程内核对象的使用计数ExitThread函数线程调用这个函数,强制线程终止运行导致操作系统清除该线程使用的所有操作系统资源。C++类对象将不被撤销。TerminateThread函数能够撤销任何线程线程的内核对象的使用计数也被递减异步运行的函数在进程终止运行时撤销线程ExitProcess和TerminateProcess函数可以终止线程,这些线程将会终止进程中的所有线程进程所使用的资源被清除剩余线程被撤销C++对象撤

7、销函数没有被调用在进程终止运行时撤销线程在进程终止运行时撤销线程2.4一个简单的Windows多线程程序3.线程间通信操作系统随机调度线程,程序员不能预知线程的执行顺序3.线程间通信下面两种情况下,线程间需要通信当有多个线程访问共享资源而不希望共享资源遭到破坏;(互斥)当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。(同步)Windows线程通信方法主要有互锁函数、临界段、事件、互斥量、信号量3.1互锁函数互锁函数是用来解决原子访问的,主要针对变量的原子访问;原子访问:当线程访问资源时,能够确保没有其它线程同时访问相同的资源。例子Longg_x;/

8、/全局变量

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

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

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