windows多线程编程入门讲解

windows多线程编程入门讲解

ID:33928358

大小:162.15 KB

页数:8页

时间:2019-02-28

windows多线程编程入门讲解_第1页
windows多线程编程入门讲解_第2页
windows多线程编程入门讲解_第3页
windows多线程编程入门讲解_第4页
windows多线程编程入门讲解_第5页
资源描述:

《windows多线程编程入门讲解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Windows平台下的多线程编程线程是进程的一条执行路径,它包含独立的堆栈和CPU 寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等。一个进程内的所有线程使用同一个地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上去运行,这样可使处理器任务平衡,并提高系统的运行效率。Windows 是一种多任务的操作系统,在Windows

2、 的一个进程内包含一个或多个线程。32 位 Windows 环境下的 Win32 API提供了多线程应用程序开发所需要的接口函数,而利用VC中提供的标准C库也可以开发多线程应用程序,相应的MFC类库封装了多线程编程的类,用户在开发时可根据应用程序的需要和特点选择相应的工具。为了使大家能全面地了解Windows 多线程编程技术,本文将重点介绍 Win32 API和 MFC两种方式下如何编制多线程程序。多线程编程在 Win32 方式下和MFC类库支持下的原理是一致的,进程的主线程在任何需要的时候都可以创建新的线程。当线程执行完后,

3、自动终止线程; 当进程结束后,所有的线程都终止。所有活动的线程共享进程的资源,因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题。当一个线程正在访问某进程对象,而另一个线程要改变该对象,就可能会产生错误的结果,编程时要解决这个冲突。Win32 API下的多线程编程Win32 API是 Windows 操作系统内核与应用程序之间的界面,它将内核提供的功能进行函数包装,应用程序通过调用相关函数而获得相应的系统功能。为了向应用程序提供多线程功能,Win32 API函数集中提供了一些处理多线程程序的函数集。直接用Win32 

4、API进行程序设计具有很多优点: 基于 Win32 的应用程序执行代码小,运行效率高,但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。用 Win32 API直接编写程序要求程序员对Windows 系统内核有一定的了解,会占用程序员很多时间对系统资源进行管理,因而程序员的工作效率降低。用 Win32 函数创建和终止线程Win32 函数库中提供了操作多线程的函数,包括创建线程、终止线程、建立互斥区等。在应用程序的主线程或者其他活动线程中创建新的线程的函数如下:HANDLECreateThread(LPSECUR

5、ITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);如果创建成功则返回线程的句柄,否则返回NULL。创建了新的线程后,该线程就开始启动执行了。但如果在 dwCreationFlags 中使用了 CREATE_SUSPENDED 特性,那么线程并不马上执行,而是先挂起,等到调用 ResumeTh

6、read 后才开始启动线程,在这个过程中可以调用下面这个函数来设置线程的优先权:BOOLSetThreadPriority(HANDLEhThread,intnPriority);当调用线程的函数返回后,线程自动终止。如果需要在线程的执行过程中终止则可调用函数:VOIDExitThread(DWORDdwExitCode);如果在线程的外面终止线程,则可调用下面的函数:BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);但应注意: 该函数可能会引起系统不稳定,而且线程所占用的资

7、源也不释放。因此,一般情况下,建议不要使用该函数。如果要终止的线程是进程内的最后一个线程,则线程被终止后相应的进程也应终止。线程的同步在线程体内,如果该线程完全独立,与其他线程没有数据存取等资源操作上的冲突,则可按照通常单线程的方法进行编程。但是,在多线程处理时情况常常不是这样,线程之间经常要同时访问一些资源。由于对共享资源进行访问引起冲突是不可避免的,为了解决这种线程同步问题,Win32 API提供了多种同步控制对象来帮助程序员解决共享资源访问冲突。在介绍这些同步对象之前先介绍一下等待函数,因为所有控制对象的访问控制都要用到

8、这个函数。Win32 API提供了一组能使线程阻塞其自身执行的等待函数。这些函数在其参数中的一个或多个同步对象产生了信号,或者超过规定的等待时间才会返回。在等待函数未返回时,线程处于等待状态,此时线程只消耗很少的CPU 时间。使用等待函数既可以保证线程的同步,又可以提高程序的

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

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

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