国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MFC的多線程與串口通信

2013-08-15 00:44:35長(zhǎng)江大學(xué)電子信息學(xué)院
電子世界 2013年4期
關(guān)鍵詞:句柄本船程序開發(fā)

長(zhǎng)江大學(xué)電子信息學(xué)院 王 偉

隨著信息技術(shù)的發(fā)展,更新更快更方便的通信方式才會(huì)滿足大眾口味,本文基于曾經(jīng)參與的雷達(dá)模擬器項(xiàng)目的相關(guān)經(jīng)驗(yàn)完成,該項(xiàng)目主要是實(shí)現(xiàn)在微機(jī)室中能夠模擬海上航行工程中教練的與學(xué)員的船只之間的指揮、調(diào)度等通信過程,有著很大的實(shí)用價(jià)值。本項(xiàng)目用VC6.0開發(fā),大致分為三部分即教練船,本船和操作舵,本文提取的是教練船與本船(即學(xué)員船)之間的通信部分,基于此基礎(chǔ)上研究多線程技術(shù)在串口通信中的應(yīng)用。

1.基于MFC的多線程

在Windows應(yīng)用程序開發(fā)時(shí), 有兩種主要方法: 基于Windows API 的開發(fā)方法和基于Windows MFC 的開發(fā)方法。后者借助于類向?qū)У膸椭?,?jiǎn)化了程序開發(fā)的過程并減少了開發(fā)的工作量和難度。本文研究的重點(diǎn)就是基于VC ++的MFC 多線程通信程序及其在串口通信中的應(yīng)用。多線程應(yīng)用程序比單線程應(yīng)用程序要考慮更多的因素,但它有著明顯的好處。在MFC類庫(kù)中,提供了多線程編程的支持,基本原理與基于Win32 API函數(shù)的設(shè)計(jì)一致,但由于MFC對(duì)同步對(duì)象作了封裝,因此對(duì)用戶編程實(shí)現(xiàn)來說更加方便。在MFC 中,線程分為兩種:用戶接口線程(User Interface Thread)和工作者線程(Worker T hread)。前者常用來獨(dú)立地處理用戶輸入和響應(yīng)用戶事件。后者常用于任務(wù)處理不要求用戶輸入的后臺(tái)任務(wù)。

2.多線程在串口通信中的應(yīng)用

串口1/0通常是很費(fèi)時(shí)的操作,如果程序需要實(shí)時(shí)監(jiān)聽串口同時(shí)又想要避免很長(zhǎng)時(shí)間等待1/0操作結(jié)束,可以利用多線程技術(shù)。下面是簡(jiǎn)單的串口通信程序,并創(chuàng)建工作線程分別監(jiān)視串口。

2.1 串口通信類

程序?qū)iT建立了一個(gè)串口通信類class CMyCOM

{Public:CMyCOM(Cstring set[6]);~CMyCOM();BOOL InCOM();BOOL OpCoM();

DWORD WrCOM(char*buf,DWORD dN);DWORD ReCOM(char*buf,DWORD dN);

void CloseCOM();HANDLE hCom://串行口句柄;HANDLE ht;//用于WM一COMMNOTIFY消息事件對(duì)象B00L bt;//標(biāo)志和串口的連接狀態(tài)};

2.2 串口通信類成員函數(shù)的說明

對(duì)串口通信類CCOM中各成員函數(shù)的說明:

(l)CMyCOM(Cstring set[6]);//串口構(gòu)造函數(shù)。

(2)~CMyCOM();//該析構(gòu)函數(shù)主要用于刪除串口初始化時(shí)所創(chuàng)建的事件對(duì)象。

(3)BOOL InCOM();//初始化。

(4)BOOL OpCoM()://打開串口連接該成員函數(shù)以重疊方式打開串口設(shè)備其中用到以下一些函數(shù):hCom=CreateFile(m_Port,GENERIC-READ,!GENERIC-WRITE,0,NULL,OPEN-EXISTING,FILE一FLAGOVERLAPPED,NULL)SetupComm(hCom,MAXBLOCK,MAXBLOCK)://重新設(shè)置讀寫緩沖區(qū)大小。SetComm-Timeouts(hCom,&Cs);//設(shè)置超時(shí)參數(shù)。SetCommMask(hCom,EV一XCHAR);//設(shè)定監(jiān)視事件。GetComm-State(hCom,&dcb);//獲取串口的初始配置。SetCommState(hCom,&dc);//用新的DCB結(jié)構(gòu)重新配置串口設(shè)備。

(5)DWORD WrCOM(char*buf,DWORD dN);//寫串口函數(shù);該成員函數(shù)將指定數(shù)量的字符從串口輸出,其中用到以下一些API函數(shù)即:ClearCommError(hCom,&dr,&Ct);//清理錯(cuò)誤標(biāo)志并返回當(dāng)前狀態(tài)信息;WriteFil e(hCom,buf,dm,&dm,&We);//寫串口。

(6)DWORD RdCOM(char*buf,DWORD dm);//讀串口函數(shù);該成員函數(shù)可以從串口接收緩沖區(qū)中讀入指定數(shù)量的字符,其中用到以下一些函數(shù):ClearCommError(hCom,&d r,&Ct);ReadFile(hCom,buf,mN,&mN,&Rd);//讀串口。

(7)void CloseCOM();//關(guān)閉串口。

2.3 建立監(jiān)控線程處理串口通信事件

如下是該線程的關(guān)鍵代碼:

UINT ComThread(LPVOID pPm)//用于監(jiān)控串口的工作者線程

{CMyCOM*pm=(CMyCOM*)pPm;memse t(&os,0,sizeof(OVERLAPPED));//初始化OVERLAPPED結(jié)構(gòu)。os.hEvent=CreatEv ent(NULL,TRUE,FALSE,NULL);//初始為無信號(hào)狀態(tài)。B00L bt=FALSE;while(pm->bt)//一直監(jiān)視串口設(shè)備,直到串口連接被掛斷。{ClearCommErrort(pm一>hCom,&dr,&Ct);//清除所有I/O錯(cuò)誤,并返回設(shè)備當(dāng)前狀態(tài);if(Ct.cblnQue){WaitForsingleobjeet(pm一>ht,INFLNITE);

ResetEvent(pm一>ht);PostMessage(pm一>ht,WM-COMMNOTIFY,EV-CHAR,0);

Continue;if(!WaitCommEvent(pm一>hCom,&dk,&os))if(GetLastError()==ERROR-IO-PENDING)//無限等待重疊操作結(jié)果Get-OverlappedResult(pm一>hCom,&os,&ds,TRUE);else{}//進(jìn)行出錯(cuò)處理}

CloseHandle(os.hEvent);//關(guān)閉事件句柄Return(0);}

3.結(jié)論

本文給出了多線程的原理優(yōu)勢(shì)方面的介紹,結(jié)合本人參與的項(xiàng)目中的例子,一個(gè)串口類及其成員函數(shù),以點(diǎn)帶面介紹了基于MFC的多線程技術(shù)在串口通信中的應(yīng)用。

[1]劉勇.如何利用MFC 實(shí)現(xiàn)線程間的同步[J].計(jì)算機(jī)應(yīng)用,2001.

[2]于華.多線程應(yīng)用程序中的同步控制技術(shù)及應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2001,07.

[3]深入淺出MFC (第二版),侯俊杰,華中科技大學(xué)出版社,2001,1.

[4]孫鑫,余安萍.VC++深入詳解(附光盤)[M].北京:電子工業(yè)出版社,2006.

[5]孔鵬.Visual C++ 6.0 完全自學(xué)手冊(cè)(附光盤)[M].北京:機(jī)械工業(yè)出版社,2007.

猜你喜歡
句柄本船程序開發(fā)
不同會(huì)遇態(tài)勢(shì)下目標(biāo)船行為模擬及其特征分析
基于虛擬力的船舶導(dǎo)航建模方法*
APP應(yīng)用程序開發(fā)模式探究
電子制作(2019年19期)2019-11-23 08:42:02
基于TestStand的自動(dòng)檢測(cè)程序開發(fā)
高校圖書館持久標(biāo)識(shí)符應(yīng)用研究
基于嵌入式系統(tǒng)Windows CE的應(yīng)用程序開發(fā)
基于App inventor 2手機(jī)程序開發(fā)過程的學(xué)習(xí)與實(shí)——以“喵喵定時(shí)器”APP開發(fā)為例
電子制作(2017年1期)2017-05-17 03:54:08
編譯程序語(yǔ)法分析句柄問題分析與探討
基于速度障礙的多船自動(dòng)避碰控制方法
兩船距離與轉(zhuǎn)向避讓難度關(guān)系量化研究
滦平县| 林西县| 铜陵市| 克山县| 瓮安县| 濮阳县| 沧源| 乐平市| 鄯善县| 通化市| 鄱阳县| 绩溪县| 郎溪县| 浮梁县| 青田县| 沛县| 汤原县| 北宁市| 共和县| 邻水| 田阳县| 通州市| 安新县| 万州区| 台江县| 台州市| 安多县| 枣庄市| 广南县| 广灵县| 清流县| 宝兴县| 宁武县| 枣庄市| 拉萨市| 屯门区| 怀安县| 三都| 盐亭县| 沂南县| 晋城|