用VC_設計多線程串行通信程序_第1頁
用VC_設計多線程串行通信程序_第2頁
用VC_設計多線程串行通信程序_第3頁
用VC_設計多線程串行通信程序_第4頁
用VC_設計多線程串行通信程序_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、收稿日期:1999207209作者簡介: 趙慶林 男,碩士研究生,主要從事信息工程與計算機控制的應用研究; 呂振肅 男,教授,研究領域:非線性智能控制、魯棒控制和計算機應用; 張 力 女,碩士,主要從事信息工程與計算機控制的應用研究和DSP 的開發(fā)研究工作。用VC+設計多線程串行通信程序趙慶林 呂振肅 張 力 蘭州大學電子與信息科學系 甘肅#蘭州(730000摘 要 文中主要討論如何用通信控件和線程函數(shù)實現(xiàn)多任務,并給出了VC+6.0下編寫通信線程的方法。關鍵詞 線程,多任務,通信控件,同步中圖分類號 TP312VC1 前言實時系統(tǒng)對多任務的要求比較普遍,典型的應用是實時監(jiān)控系統(tǒng)要求后臺數(shù)據采

2、集。這時通信程序就要有一個線程專門負責數(shù)據采集,以實現(xiàn)實時多任務的需要。Windo ws 95引入的先進技術之一就是線程。線程是Windo ws 95的唯一執(zhí)行單位,是Windo ws95為程序分配CPU 時間的基本實體。每個進程由一個或多個線程組成(每個進程至少有一個線程,而各個線程又可根據其調度優(yōu)先級分配CPU 時間以完成指定的操作,所以,W ind ow s95可依靠線程的優(yōu)先級和分配給線程的CPU 時間來調度線程以達到搶先多任務的目的。同一進程中的多個線程,可以共享地址空間和所有的處理器資源,避免了用多進程實現(xiàn)并行性的缺陷。通信程序可用VC+提供的通信控件編寫,這主要是由于控件簡潔實用

3、1,但當實時性不能不考慮時,控件要用到線程中就比較困難。因為控件必須拖到對話框中使用,在線程中就不能像在對話框中那樣方便地使用控件進行數(shù)據采集。本文就是針對這種情況討論如何在V C+6.0開發(fā)環(huán)境下,利用通信控件編寫后臺數(shù)據采集的工作線程,以實現(xiàn)實時多任務的操作。2 編寫工作線程WIN32應用程序中的線程有兩種類型,一種是工作線程,一種是用戶接口線程。前者不處理窗口消息,常用于后臺執(zhí)行任務,例如圖形繪制、磁盤讀寫、串行通信等費時的操作。后者用來處理用戶輸入和響應由用戶產生的事件和消息,它通過自己的消息泵獲得系統(tǒng)接收到的消息。我們編寫的通信線程使用工作線程,用于后臺數(shù)據采集。微軟基本類庫(Mic

4、roso ft Foundation Class MFC為多線程提供了三個全局函數(shù)A fxBegin Thread(,A fxGetThread(,和AfxEnd Thread(,它們的描述如表1所示:表1函 數(shù)描 述C winThread *AfxBe 2ginThread (AFX THRE ADPRIC pfnThreadProc,LPVOID pPara m,Int nPri 2ori ty =THR EAD PRIORI 2TY NOR MAL,UINTnS tackSize =0,DW ORDdwC reatFlags =0,LPS E C URITY A T 2TRIB UTES

5、 lpSecuri tyAttrs=N ULL創(chuàng)建一個工作新線程。返回值是指向新創(chuàng)建的線程對象的指針。C winThread *AfxGet 2Thread(調用此成員函數(shù)可獲得指向代表當前執(zhí)行的線程的Cwi nThread 對象的指針,必須從所需的線程中調用此函數(shù)。Void Af xEndThread (UIN T nExitCode調用此成員函數(shù)來終止當前的執(zhí)行線程。必須從將被終止的線程中調用此函數(shù)。在創(chuàng)建工作線程時,應首先編寫控制函數(shù)p fn 2ThreadProc,該函數(shù)入口點就是線程的啟動點,函數(shù)執(zhí)行完畢后,它所對應的線程也立即終止。函數(shù)結構為:UINT ThreadProc (LP

6、VOID pPram第20卷第1期2000年1月計算機應用Computer Applications Vol.20,No.1Jan.2000while(1if(!mcom.Ge tPortOpen(/檢測端口是否打開。mcom.SetPortOpen(TRUE;mcom.SetOutput(COleVari ant(sendary;/向下位機發(fā)送存放在數(shù)組sendary下的數(shù)據。sendary.Rem oveAll(;Sleep(500;其中ThreadProc為函數(shù)名。PPram是一個32位值,它是在創(chuàng)建線程對象時傳遞給函數(shù)的值。對于工作線程來講,控制函數(shù)正常執(zhí)行到函數(shù)結束點后,相應的工作線

7、程也就正常終止了。我們所編寫的通信線程函數(shù)是一個不斷向下位機發(fā)送數(shù)據的死循環(huán)過程,所以我們可以用函數(shù)A fxEndThread(來正常終止,但它只能在要終止的線程內部自己調用。也可以在線程外使用TerminateThread(函數(shù)來強行終止線程。3創(chuàng)建通信控件在對話框中創(chuàng)建通信控件時,我們是將通信控件從工具箱中拉到對話框中,而在線程函數(shù)中使用通信控件不同于在對話框下使用控件,在此應該從菜單Pro ject|AddTo Project|File,下插入mscomm.h 文件和msco mm.cpp文件。這一對C+文件是通信控件本身所帶的類描述,只要在使用通信控件的任何項目文件標簽下都可以找到。此

8、時你可以打開ClassView查看是否已加入到你的項目之中。然后,通過在MainFram中的O nCreat(函數(shù)下使用cm2 sco mm類的創(chuàng)建函數(shù),函數(shù)形式如下:BOO L C reate(LPC TS TR lpsz Window Name,D WORD dw Style, const REC T&rec t,CW nd*pParentWnd,UIN T nID,C File* pPersi st=NULL,B OO L bStorage=F ALSE,BS TR bstrLicKey =N ULL然后定義一個全局變量mcomm(C MSComm mco m,這時mco mm做

9、為通信控件對象就可對其屬性進行設置。通信控件共提供了27個屬性,主要的屬性列舉如下:CommPort設置并返回通信口號,缺省為CO M1,可設置116個。Settings設置并返回波特率、奇偶校驗、數(shù)據位、停止位的字符串。其中波特率的范圍為300b/ s19200b/s。PortOpen設置并返回通信口的狀態(tài),同時可以用來打開和關閉通信口。InputLen決定每次Input讀入的字符個數(shù),缺省為0,表示讀取接收緩沖區(qū)的全部內容。Input讀入并清除接收緩沖區(qū)的字符。InBufferCount返回接收緩沖區(qū)已接收的字符數(shù),通過置0可清除接收緩沖區(qū)。O utput將發(fā)送的字符串或數(shù)組寫到發(fā)送緩沖區(qū)

10、。InputMo de定義Inpput屬性獲得數(shù)據的方式(VC5.0新增屬性。Rthreshold設置、返回在通信控件置ComEvRe2 cieve并激發(fā)OnCo mm事件前要接收的字符數(shù)。SThreshold設置、返回通信控件置Co mEv Send 并激發(fā)OnCom m事件前發(fā)送緩沖區(qū)中的最少字符數(shù)。下面一段程序示范了如何用函數(shù)對通信控件的屬性進行初始化設置。voi d C MainFrame:Initialize(mco m.SetSettings("9600,N,8,1"/設置通信參數(shù)mco m.SetC om mPort(2;/設置串口號mco m.SetInB

11、ufferSi ze(512;/設置接收緩沖區(qū)mco m.SetInB ufferC ount(0;/清除接收緩沖區(qū)mco m.SetInputMode(1;/設置接收模式mco m.SetInputLen(0;/設置接收方式因為控件是由函數(shù)創(chuàng)建的,類向導不能管理消息映射,所以必須在頭文件中手工添加,首先加入下面的聲明:afxm sg voi d OnCom m(;這個函數(shù)是定義通信事件的函數(shù),然后加入宏: DEC LAREEVENTSINKMAP(該宏是用來定義O LE事件映射的,在cpp文件中也要相應加入:B EGINEVENTSINKMAP(C MainFram e,C Fra meW

12、ndONEVENT(C MainFram e,IDC O MM,1/*OnCom m*/, OnCom m,VTSN ONEENDEVENTSINKMAP(在程序中編寫OnCo mm(函數(shù),典型的格式如下:voi d C MainFrame:OnCom m(EnterCriticalS ection(&mcsS yn;/進入臨界區(qū)。s witch(mcom.GetCom m Event(cas e2:/在此加入你要處理接收數(shù)據的程序。LeaveC riticalSection(&mcsSyn;/離開臨界區(qū)。此時,就可以啟動線程,調用控制函數(shù)往下位機發(fā)送數(shù)據而由OnCo mm(函

13、數(shù)響應通信事件來完成數(shù)據的采集、處理任務。77第1期趙慶林等:用VC+設計多線程串行通信程序在驅動程序中對硬盤加密許劍卓戴英俠左英男中國科技大學研究生院(北京信息安全國家重點實驗室北京(100039摘要可移動硬盤使用的日益廣泛,為保證硬盤在丟失時不造成嚴重的損失,有必要對硬盤加密。我們開發(fā)了N T和Win95下的硬盤驅動程序,在該驅動程序中直接對硬盤加密,只有持有密鑰的用戶才能夠訪問該硬盤。關鍵詞N T,驅動程序,加密中圖分類號TP309.71概述可移動硬盤的使用日益廣泛,由于硬盤上帶有的數(shù)據量比軟盤上的數(shù)據量要大的多,這種硬盤的丟失可能會對其主人造成很嚴重的影響,比如企業(yè)的商業(yè)秘密、科研單位

14、的研究成果以及軍事單位的各種保密信息等都必須保證其安全性。因此,有必要對硬盤進行加密。我們在Windo us N T/95/98平臺下設計了硬盤的驅動程序,使用該驅動程序后,只有在用戶持有某個密鑰時才能訪問該硬盤,所有寫入該硬盤的數(shù)據或文件都自動用密鑰加密,當操作系統(tǒng)讀取硬盤時驅動程序將自動用該密鑰解密。這樣,在硬盤丟失時不會有任何泄密的危險,因為對于沒有密鑰的用戶該硬盤中的信息完全是一堆毫無意義的信息。本文將以N T上的驅動程序為例描述該軟件的體系結構。2N T驅動程序的基本結構在N T中,驅動程序基本功能可描述為:驅動程序是控制一定的系統(tǒng)資源、調用N T的系統(tǒng)服務函數(shù)為操作系統(tǒng)提供訪問該資

15、源的方法的程序。因此在設計驅動程序時應考慮三個要點:#驅動程序占有哪些資源,如何使用和訪問這些資源。這里的資源可以時中斷、D MA通道、IO端口、內存、注冊表等。在我們的驅動程序中,唯一需要使用的資源是內存和注冊表;#驅動程序可以調用哪些系統(tǒng)功能。在N T中, HA L層(硬件抽象層為訪問硬件提供了與平臺無關的訪問函數(shù),而涉及IO訪問、內存分配、進程管理以及配置信息的讀取等功能由Executive部件提供。一般使用DD K即可調用這些函數(shù)。具體將調用哪些函數(shù)我們將在第四小節(jié)中給出簡單說明;#驅動程序應給操作系統(tǒng)提供怎樣的接口。驅動程序最終的目的是為操作系統(tǒng)提供訪問資源的服務,操作系統(tǒng)怎樣訪問驅

16、動程序即是驅動程序的訪問規(guī)范。對于N T操作系統(tǒng)其訪問規(guī)范如下:在N T中,操作系統(tǒng)為每個驅動程序生成一個由DRIV EROBJ結構描述的D river對象。在該對象收稿日期:1999209220(修改稿作者簡介:許劍卓(1977-,碩士研究生,研究方向:計算機網絡安全;戴英俠(1942-,教授,研究方向:信息安全;左英男(1973-,碩士研究生,研究方向:計算機網絡安全。4結束語總之,通信控件可方便地實現(xiàn)微機的串行通信,再利用多線程則可以使通信任務實時性大大提高。只要掌握好控件的屬性和多線程函數(shù),就能輕松地編寫多任務的通信程序。此方法我們已經在VC+ +6.0下與電力實時監(jiān)測儀表3720AC M的通信中試驗成功。在此值得一提的是在多線程中最好使用同步類(CSncObject,CSemaphore,CMu tex,CCriticalSection 和CEv

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論