钟垣如
(福建星海通信科技有限公司,福建 福州 300008)
VC++编程技术与技巧研究
钟垣如
(福建星海通信科技有限公司,福建福州300008)
VC++语言是目前较流行的计算机编程语言,其处理机制和封装功能为编程者提供了极大的方便。本文探讨VC++语言的编程特点和方法,给出了VC++多线程编程的相关技巧。
VC++语言编程技术多线程编程技巧
VC++语言是目前使用范围最广的计算机高级编程语言,它是在C语言的基础上演变而来的,也是对C语言的继承、丰富和发展。VC++语言的出现为Windows开发开辟了新的天地,借助ApplicationWizard使得开发人员摆脱了那些每次必写的基本代码,借助ClassWizard和消息映射使得开发人员摆脱了定义消息处理时的那种混乱和冗长的代码段;VC++利用C++中的对象,使得开发人员可以远离系统,从而更加接近开发语言。总之,VC++减少了程序编写和调试的工作量,提高了软件的可复用性、可扩展性,缩短了软件的开发周期。
在一般情况下,使用VC++语言进行编程时,有2种方法,一是API;二是MFC。在API编程方式下,应用程序是由多个函数组成的,开发人员可以用API的参考手册了解每一个函数的功能和使用方法;MFC为开发人员进行编程提供了基本的类库,可以减少开发时的编码工作量,利用C++语言的继承和封装特性,可以轻松进行编码。另外,MFC是可以进行移植的,代码可以从windows 3.1移植到windows 98或者是windows NT等相关平台。
建立一个应用程序,首先要设计用户界面。开发人员根据需求分析的结果,判定用户所需要的功能,并根据用户的需求设置相应的用户界面对象。Windows应用程序的界面有一些标准的控件,比如菜单、按钮、列表框和滚动条等,开发人员可以根据程序的需要进行选择组合,并将它们合理布局在屏幕上。在进行界面设计时,要从用户的角度进行设计,做到界面友好,简洁,以方便用户使用为基本原则。
接着就是进行代码实现了,程序开发人员可以使用API、MFC类库或者混合编程。通常情况下使用MFC进行编程,因为MFC效率高,可以大大减少代码的编写量。在使用MFC编程时,编写的代码是用来控制用户界面上的各种元素的,并定制这些元素的外观特征,除此之外,还要编写用来响应用户操作和使用这些控制的代码程序。比如,当用户单击一个按钮时,应该有相应的代码来响应用户的操作,也就是通常所说的事件驱动代码,它构成了所有的应用程序。
在VC++编程过程中,如果能掌握一定的编程技巧,则能够比较容易地实现编程的过程。在比较简单的程序中,主要是通过MFC提供的函数以及新类的产生来执行任务,通过对不同性质的函数综合运用,来实现应用程序的功能。在VC++编程过程上,如果涉及到多线程编程,就会变得比较复杂,下面主要讲解多线程编程的一些技巧。
MFC有两类线程,分别是User Interface Thread(用户界面UI线程)和Worker Thread(工作者线程),两者的主要区别在于工作者进程没有消息循环,用户界面进程有自己的消息队列和消息循环。由于工作者进程没有消息机制,它通常用于执行后台计算和维护任务,比如打印机后台处理程序、冗长的计算过程等。用户界面进程主要用于处理独立于线程之外的用户输入、响应用户以及系统产生的各种消息和事件等。用户界面线程的一个典型应用就是CWinApp类,它是CWinThread类的派生类,提供应用程序的主线程,并负责处理用户产生的事件和消息。
(1)创建线程
要创建一个线程,MFC需要调用全局函数AfxBeginThread()。无论是工作者线程还是用户界面线程,都需要指定额外的参数以修改优先级、堆栈大小、创建标志和安全特性等。函数AfxBeginThread返回指向CWinThread类对象的指针。线程的入口函数声明如下:
UINT MyControllingFunction(LPVOID pParam);
该参数接收的值将在线程对象创建时传递给构造函数,入口函数将用某种方式解释该值。它可以是数量值,或是指向包括多个参数的结构的指针,甚至可以忽略。函数结束时,应返回一个UINT类型的值,并指明结束的原因。通常,返回0表明成功,其它值则代表不同的错误。
(2)启动线程
由函数AfxBeginThread创建并初始化一个CWinThread类的对象,启动并返回该线程的地址,则线程进入运行状态。下面用简单的代码说明怎样定义一个入口函数以及如何在程序的其他部分使用。
(3)线程同步
编写多线程应用程序最重要的问题就是线程之间的资源同步访问,多个线程在共享资源时如果发生访问冲突,会产生不可预知的结果。MFC提供了一组同步和同步访问类来解决这个问题。其中,同步对象包括:CsyncObject(同步对象)、Csemaphore(信号量)、Cmutex(互斥对象)、CcriticalSection(临界区)和Cevent(事件对象);同步访问对象包括:CMultiLock和CSingleLock。同步类用于访问资源时保证资源的整体性。其中CSyncObject是其他4个同步类的基类,不直接使用。信号同步类CSemaphore通常用于当一个应用程序中同时有多个线程访问一个资源的情况(例如,应用程序允许对同一个Document有多个View);事件同步类CEvent通常用于在应用程序访问资源之前应用程序必须等待的情况(比如,在数据写进一个文件之前数据必须从通信端口得到);互斥同步类CMutex和临界区同步类CCriticalSection都是用于保证一个资源一次只能有一个线程访问,二者的不同之处在于前者允许有多个应用程序使用该资源,例如,该资源在一个DLL当中,而后者则不允许对同一个资源的访问超出进程的范畴,而且使用临界区的方式效率比较高。
VC++是建立在Windows平台上的一种编程语言,受到很多开发人员的青睐,但是很多人认为VC++入门和编程存在一定的难度。在刚开始接触VC时,不要急于Windows开发,应该进行一些字符界面程序的编写,增加对语言的熟悉程度,同时也训练自己的思维方式和掌握编程的流程,知悉在编程时常犯的错误。实际上,只要掌握VC++的编程技术和方法,灵活运用VC++的各种特性,特别是利用MFC进行开发,就能便捷实现应用程序的功能。
[1]邹丽.浅谈VC++编程技术与技巧研究[J].计算机光盘软件与应用,2012(12):187-189.
[2]石通.C++语言编程技术分析[J].电脑编程技巧与维护,2011 (14):19-20+22.
[3]范晶.在VC++中使用ADO方式对ACCESS数据库进行操作[J].广播电视信息,2014(11):77-78.
Research on VC++Programming Technology and Skills
ZHONG Yuan-ru
(Fujian Xinghai Communication Science And Technology Co.,Ltd.Fuzhou Fujian 300008)
Language VC++is currently more popular computer programming language,the processing mechanism and the package functionality provides great convenience for the programmer.This paper discusses the programming characteristics and methods of VC++ and gives the relevant skills of VC++multithreaded programming.
VC++language;programming;multithreaded programming;skills.
G623.58
A
1008-1739(2015)11-71-2
定稿日期:2015-05-12