VC多线程通信(详解及实例)

VC多线程通信(详解及实例)


2024年4月21日发(作者:)

VC中利用多线程技术实现线程之间的通信

当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),

对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任

务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概

念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多

任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都

是必需要掌握的。本实例针对多线程技术在应用中经常遇到的问题,如线程间的通信、同

步等,分别进行探讨,并利用多线程技术进行线程之间的通信,实现了数字的简单排序。

一、 实现方法

1、理解线程

要讲解线程,不得不说一下进程,进程是应用程序的执行实例,每个进程是由私有的

虚拟地址空间、代码、数据和其它系统资源组成。进程在运行时创建的资源随着进程的终

止而死亡。线程的基本思想很简单,它是一个独立的执行流,是进程内部的一个独立的执

行单元,相当于一个子程序,它对应于Visual C++中的CwinThread类对象。单独一个

执行程序运行时,缺省地包含的一个主线程,主线程以函数地址的形式出现,提供程序的

启动点,如main()或WinMain()函数等。当主线程终止时,进程也随之终止。根据

实际需要,应用程序可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。

一个进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统

资源。操作系统给每个线程分配不同的CPU时间片,在某一个时刻,CPU只执行一个时

间片内的线程,多个时间片中的相应线程在CPU内轮流执行,由于每个时间片时间很短,

所以对用户来说,仿佛各个线程在计算机中是并行处理的。操作系统是根据线程的优先级

来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。

线程被分为两种:用户界面线程和工作线程(又称为后台线程)。用户界面线程通常用

来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程CWinAPP对象

就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程

序的结束,进程终止。工作线程用来执行程序的后台处理任务,比如计算、调度、对串口

的读写操作等,它和用户界面线程的区别是它不用从CWinThread类派生来创建,对它来

说最重要的是如何实现工作线程任务的运行控制函数。工作线程和用户界面线程启动时要

调用同一个函数的不同版本;最后需要读者明白的是,一个进程中的所有线程共享它们父

进程的变量,但同时每个线程可以拥有自己的变量。

2、线程的管理和操作

(一)线程的启动

创建一个用户界面线程,首先要从类CwinThread产生一个派生类,同时必须使用

DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现这个CwinThread

派生类。第二步是根据需要重载该派生类的一些成员函数如:ExitInstance()、InitInstance

()、OnIdle()、PreTranslateMessage()等函数。最后调用AfxBeginThread()函数

的一个版本:CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int

nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD

dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ) 启动该用户

界面线程,其中第一个参数为指向定义的用户界面线程类指针变量,第二个参数为线程的

优先级,第三个参数为线程所对应的堆栈大小,第四个参数为线程创建时的附加标志,缺


发布者:admin,转转请注明出处:http://www.yc00.com/news/1713666756a2294474.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信