亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 借助vc++實現串口通訊程序中的多線程應用.txt

?? RS-232-C端口實時監控軟件的設計實現 多線程技術在VC++串口通信程序中的應用研究 用VC6實現串行通信的三種方法 在基于單文檔程序中應用MSCOMM串口通訊控件
?? TXT
字號:
借助VC++實現串口通訊程序中的多線程應用 

-------------------------------------------------------------------------
 
1、概述

在廣電網絡數字化雙向改造中,為了實現廣電網絡對多媒體數字業務的支持,在廣電網絡主干網和支干網上建設了大量的無人值守的支持數字業務的中心機房,隨著現在數據業務的開展,業務平臺的安全以及廣播電視的安全播出的迫切需要,必須建立相應的對這些無人值守機房進行遠程實時監控和通訊的管理系統。在這些遠程實時監控和通訊的管理系統中,信息實時性是最主要的技術要求之一,所以在遠程實時監控和通訊管理系統的程序設計中滿足實時性要求是軟件設計的根本出發點之一。WINDOWS系統是搶先式的多任務操作系統,程序對CPU的占用時間由系統決定。多任務就是指操作系統可以同時運行多個進程,每個進程又可以同時執行多個線程。進程是應用程序的運行實例,要求擁有自己的地址空間,每個進程擁有一個主線程,同時可以建立其他的線程。線程是操作系統分配CPU 時間的基本實體,每個線程占用的CPU時間由系統分配,系統不停的在各個線程之間切換。進程中的線程共享進程的虛擬地址空間,可以訪問進程的資源,處于并行執行狀態,所以在串行通訊程序中應用多線程就可以簡化應用程序的結構,把一些復雜的運算放在后臺并行執行,從而大大提高應用程序的響應實時能力。


2、VC++對多線程的支持

在VC++編程中通常使用MFC程序進行開發,這樣可以減少程序代碼的書寫。在VC++6.0版本中的MFC應用程序的線程是由CwinThread對象表來表示的,該線程分為兩種:用戶界面線程(GUI-Thread)和工作者線程(Worker-Thread)。用戶界面線程能夠提供界面和用戶交互,用于處理用戶輸入和響應各種信息和事件;工作者線程主要用來處理應用程序的后臺任務。應用程序可以通過調用AfxBejinThread()函數自動創建一個CwinThread對象,從而開始一個線程。線程的終止條件有如下4種:線程函數返回;線程調用ExitThtead()退出;異常情況下用現成的句柄調用TerminateThread()退出;線程所屬的進程被終止。


3、多線程在RS-322串口通信中的應用

3.1 串口通信對線程同步的要求

因為同一進程的所有線程共享進程的虛擬地址空間,而在WINDOWS中線程是匯編級中斷,所以才有可能實現多個線程同時訪問同一個對象。這些對象可以是全局變量、MFC的對象、MFC的API等。而串口通信對每個串口對象只提供一個緩沖區,發送接收都要用到這一個緩沖區,所以要求必須建立同步線程執行,使得一個時刻只能進行一種線程操作,以免通信出錯。串口通信處理的多個線程需要協調運行,一個線程必須等待另一線程結束才能開始,在處理一個線程的同時必須把其余待處理的線程掛起等待,以減少其余待處理線程對CPU的資源占用,正處理的線程一旦處理結束則通過線程間的通信發出信號來擊活被掛起的線程中的一個線程進入處理。VC++提供了以下4個同步對象來協調實現多線程的并行:

Csemaphore信號燈對象,允許一定數量的現成訪問某個資源,用來控制訪問共享資源的線程數量。

Cmutex互斥量對象,一個時刻至多只允許一個線程訪問某個資源,未被占用時處于有信號狀態,可實現對共享線程的互斥訪問。

Cevent事件對象,用于使一個線程統治其余現成某個事件正發生,所以可以用來實現禁止對某個資源的訪問,直至該線程結束釋放資源使資源處于有信號狀態,從而使被掛起的線程被通知得以執行

CcriticalSection臨界區對象,將一段代碼置入臨界緩沖區,并只允許一個線程進入執行這段代碼,該臨界緩沖區僅在創建這個緩沖區的進程中有效。

3.2 等待函數

為了實現線程在資源對象被占用時把自己掛起而阻塞自己執行,等待資源空閑信號停止阻塞繼續執行,從而減少對CPU的資源占用,WIN32 API中提供了兩個等待函數來實現這一功能:WaitForSingleObject()(只可監控單個同步對象)WaitForMUultipleObjects(可同時監控多個同步對象)。在監控系統中,處理串口通信只是CPU的一部分事物,所以必須使用等待函數提高程序的執行效率。

3.3 串口通信的重疊I/O方式

MFC對于串口通信是作為文件設備來處理的,用CreateFile()打開串口獲得一個串口句柄。打開后由SetCommState()進行串口端口配置:緩沖區設置、超時設置、數據格式設置等等。設置成功后就可以調用ReadFile()和WriteFile()進行數據的讀與寫,用WaitCommEvent()監控通信事件。CloseHandle()用于關閉串口。在ReadFile()和WriteFile()進行串口讀寫時可以采取同步執行方式也可以采用重疊I/O方式。由于采用同步執行方式,被調用的函數必須執行結束后才被返回,這必然要求除正被執行線程外其余線程被掛起等待,效率低;而采用重疊I/O方式,被調用的函數不必等執行結束后才被返回,而是可以立即返回,因為I/O操作在后臺執行,這樣其他線程就不必等待馬上可以進行處理其他事物,實現了不同線程可以在同一串口句柄上基本上接近同時實現讀寫操作,實現重疊,是通信的實時性提高。

采用重疊I/O方式,線程必須創建OVERLAPPED結構攻讀寫函數使用,該結構最重要的成員是hEvent事件句柄。它將作為線程的同步對象使用,讀寫函數完成時hEvent處于有信號狀態,表示可以進行讀寫操作;讀寫函數未完成時hEvent被置于無信號狀態。

4、多線程應用在串口通信程序中的實現

應用程序需專門建立一個串口通信類,并在串口通信相關程序段中應用相關函數實現多線程的應用,下面給出實現多線程應用的的關鍵函數的核心代碼。

1).專門針對COM1的初始化程序段(只寫出涉及多線程應用的關鍵步驟)

BOOL InitComm()//串口初始化

{

HANDLE m_hComm;

COMMTIMEOUTS m_CommTimeouts;

m_hComm = CreateFile(“COM1” , //這里只使用串口1,如要對多個串口初始化需先在初始化前進入代碼臨界區,以保證在某時刻只對一個串口初始化

GENERIC_READ | GENRIC_WRITE, //定義串口打開類型為可讀寫

0, //以獨占串口資源模式打開串口

NULL, //對該串口不設置安全屬性

OPEN_EXISTING,FILE_FLAG_OVERLAPPED, //設置重疊I/O模式

0;)

if (m_hComm==INVALID_HANDLE_VALUE) //串口打開不成功

{return FALSE;}

m_CommTimeouts.ReadIntervalTimeout = 1000; //進行超時設置,具體量值根據實際需要調整

m_CommTimeouts.ReadTotaloutMultiplier = 500; //進行超時設置

m_CommTimeouts.ReadTotaloutConstant = 5000; //進行超時設置

m_CommTimeouts.WriteTotaloutMultiplier = 500; //進行超時設置

m_CommTimeouts.WriteTotaloutConstant = 5000; //進行超時設置

if(! SetCommTimeouts(m_hComm,&m_CommTimeouts))

{CloseHandle(m_hComm);

return FALSE;}

PurgeComm (m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT |PURGE_TXABORT); //清除串口緩沖區

Reture TRUE;

}


在上述串口初始化成功后,監控應用主程序就可以通過應用AfxBejinThread()函數來建立串口監控用的工作者線程從而實現對該串口通信多線程的并行管理,如果要對多個串口同時監控,可以分別對各個串口建立監控線程,各自實現對應串口的通信多線程的并行管理。下面是建立串口監控用的工作者線程的關鍵程序段代碼(只寫出涉及多線程應用的關鍵步驟)。


UINT CommThread(LPVOID pParam) //用于監控串口用的工作者線程

{

BOOL bResult = FLASE;

If(m_hComm) //查看前述串口初始化程序是否已打開串口

PurgeComm (m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT |PURGE_TXABORT);

for(;;) //只要所要監控的串口有線程在運行,就一直處于監視端口行為的無限循環

{

bResult = WaitCommEvent(m_hComm,&Event,&m_ov); // m_ov是OVERLAPPED類型的成員變量

if(! bResult)

{//進行相關的出錯處理的具體函數調用過程。這里與主題無關,略去不表述

}

else

{

Event = WaitForMultipleObjects(4, m_hEvent, FALSE, INFINITE);

//無限等待設定的事件發生,其中m_hEvent根據需要設定了須響應的接收、發送、關閉串口事件以及OVERLAPPED類型的hEvent事件

Switch(Event)

{//串口進行數據讀寫事件的響應處理過程。這里與主題無關,略去不表述

}

return 0;

}


在編寫遠程監控串口通訊主程序時增加上述的關鍵程序段就可實現串口通訊程序的多線程應用,從而提高串口的事件響應能力,提高遠端的數據交互實時性。


5、結束語

做為一個機房遠程監控系統的通信組成部分,該應用多線程的串口通信程序在VC++6.0中編譯通過,在以WINDOWS操作系統為廣電網絡安全管理平臺(用戶人機界面)的遠程監控管理中運行狀況良好,有效的提高了信息管理的實時性。

該程序除了具體開發的應用對象廣電網絡無人值守機房中適用,還可以推廣到相似的只要是以WINDOWS為界面管理平臺的一切遠程通信的串口管理中,提高串口通信的實時性。
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看免费视频综合| 狠狠色丁香久久婷婷综合丁香| 欧美一区二区三区色| 欧美午夜理伦三级在线观看| 日本韩国一区二区| 欧美午夜片在线看| 欧美国产精品久久| 国产欧美日韩另类视频免费观看 | 日韩一区二区视频| 日韩一区二区三区免费看 | 国产aⅴ综合色| youjizz久久| 欧美色综合久久| 中文字幕一区二区三中文字幕| 一区二区三区四区不卡在线| 亚洲成a人v欧美综合天堂| 日本大胆欧美人术艺术动态| 国产精品一区二区在线播放 | 精品国产第一区二区三区观看体验 | 在线播放91灌醉迷j高跟美女| 91麻豆免费看片| 91精品久久久久久蜜臀| 亚洲制服丝袜在线| 国产专区欧美精品| 欧美大片拔萝卜| 一区二区三区在线免费播放| 成人国产在线观看| 日韩一区二区免费高清| 日韩精品视频网站| 成人av在线看| 中文字幕欧美国产| 成人福利视频在线| 国产精品美女一区二区在线观看| 午夜不卡在线视频| 成人av小说网| 国产精品九色蝌蚪自拍| 捆绑变态av一区二区三区| 91日韩一区二区三区| 亚洲欧美在线高清| 色妞www精品视频| 精品成人一区二区三区四区| 九色综合狠狠综合久久| 欧美主播一区二区三区| 亚洲成人在线观看视频| 欧美日韩高清一区二区不卡| 亚洲欧洲av色图| 色吧成人激情小说| 日韩精品高清不卡| 欧美变态口味重另类| 天堂一区二区在线| 日韩欧美一级二级| 高清免费成人av| 亚洲一区二区三区中文字幕在线| 欧美天天综合网| 老鸭窝一区二区久久精品| 精品国产网站在线观看| 成人美女在线观看| 久久久久亚洲蜜桃| 麻豆精品一区二区| 欧美一区二区三区成人| 国产一区在线看| 精品成人免费观看| 不卡视频在线看| 亚洲成人午夜电影| 久久久综合视频| 色偷偷88欧美精品久久久| 日韩av中文字幕一区二区| 国产日韩在线不卡| 欧美日韩三级视频| 丝袜亚洲另类欧美综合| 国产亚洲欧美日韩俺去了| 国产一区二三区| 亚洲精品国产成人久久av盗摄 | 日本一二三不卡| 欧美亚洲尤物久久| 国产激情偷乱视频一区二区三区| 欧美大片顶级少妇| 91麻豆免费看| 国产精品一级黄| 日韩精品免费专区| 亚洲精品少妇30p| 久久这里只有精品6| 粉嫩欧美一区二区三区高清影视| 亚洲一区二区在线观看视频| 国产人久久人人人人爽| 欧美一区午夜精品| 色94色欧美sute亚洲线路一ni| 久久av资源站| 国精品**一区二区三区在线蜜桃| 国产精品国产三级国产aⅴ原创| 欧美精品v日韩精品v韩国精品v| 国产成人丝袜美腿| 日本成人超碰在线观看| 亚洲精选视频免费看| 欧美—级在线免费片| 欧美一卡二卡三卡| 欧美日韩国产天堂| 免费看日韩精品| 欧美日韩在线三级| 91无套直看片红桃| 国产成人免费视频网站| 亚洲一区视频在线观看视频| 久久精品在线免费观看| 欧美一区二区三区思思人| 欧美探花视频资源| 色综合激情五月| 99精品在线观看视频| 三级亚洲高清视频| 亚洲已满18点击进入久久| 亚洲日本成人在线观看| 91精品国产色综合久久ai换脸| 色哟哟一区二区三区| 99热精品国产| 99久久精品国产精品久久| 国产大陆精品国产| 国产美女一区二区三区| 国产麻豆视频一区二区| 国产美女主播视频一区| 国产又黄又大久久| 成人午夜看片网址| 成人美女在线视频| 91蝌蚪porny| 欧美性做爰猛烈叫床潮| 久久久不卡网国产精品二区| 日韩欧美在线综合网| www激情久久| 国产精品免费视频观看| 成人欧美一区二区三区视频网页| 国产精品高潮久久久久无| 亚洲欧美成人一区二区三区| 日韩视频免费观看高清完整版 | 欧美午夜视频网站| 欧美精品黑人性xxxx| 欧美大尺度电影在线| 久久久久久黄色| 国产精品网友自拍| 亚洲一区免费在线观看| 日本vs亚洲vs韩国一区三区| 激情六月婷婷久久| 成人黄色大片在线观看| 色噜噜狠狠一区二区三区果冻| 欧美日韩黄视频| 久久午夜电影网| 亚洲另类在线制服丝袜| 日本va欧美va欧美va精品| 国产999精品久久久久久绿帽| 成人久久视频在线观看| 中文乱码免费一区二区| 亚洲综合图片区| 久久激情五月激情| 97se亚洲国产综合自在线不卡| 欧美视频一区二| 日韩欧美高清dvd碟片| 欧美激情艳妇裸体舞| 婷婷国产在线综合| gogogo免费视频观看亚洲一| 欧美日韩免费一区二区三区| 久久久亚洲综合| 亚洲成av人片一区二区三区| 国产成人在线影院| 欧美精品粉嫩高潮一区二区| 国产欧美一二三区| 丝瓜av网站精品一区二区| 成人性色生活片免费看爆迷你毛片| 91黄色激情网站| 日本一区二区三区国色天香| 日韩福利视频网| 91视频.com| 久久久精品黄色| 麻豆精品一区二区综合av| 一本大道久久a久久精二百| 国产亚洲欧洲997久久综合| 日韩专区一卡二卡| 日本精品免费观看高清观看| 日本一区二区免费在线观看视频| 亚瑟在线精品视频| 99re在线精品| 国产色产综合色产在线视频| 天堂成人国产精品一区| 色av成人天堂桃色av| 国产精品嫩草久久久久| 国产精品88av| 欧美一二三四区在线| 亚洲大片在线观看| 91黄色激情网站| 亚洲色图制服丝袜| 国产成人免费xxxxxxxx| www欧美成人18+| 久久99国产精品麻豆| 欧美一二三区在线| 日本欧美一区二区三区乱码| 欧美色倩网站大全免费| 一区二区三区四区在线播放| 91尤物视频在线观看| 国产精品久久久久一区| 国产很黄免费观看久久| 久久久国产精品午夜一区ai换脸| 免费高清成人在线| 日韩欧美亚洲一区二区| 免费观看91视频大全|