智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

深入淺出Win32多線程程序設計之綜合實例

來源:網絡

點擊:1836

A+ A-

所屬頻道:新聞中心

關鍵詞: Win32,多線程程序設計,多線程

    本章我們將以工業控制和嵌入式系統中運用極為廣泛的串口通信為例講述多線程的典型應用。

    而網絡通信也是多線程應用最廣泛的領域之一,所以本章的最后一節也將對多線程網絡通信進行簡短的描述。

    1.串口通信

    在工業控制系統中,工控機(一般都基于PC Windows平臺)經常需要與單片機通過串口進行通信。因此,操作和使用PC的串口成為大多數單片機、嵌入式系統領域工程師必須具備的能力。

    串口的使用需要通過三個步驟來完成的:

    (1) 打開通信端口;

    (2) 初始化串口,設置波特率、數據位、停止位、奇偶校驗等參數。為了給讀者一個直觀的印象,下圖從Windows的"控制面板->系統->設備管理器->通信端口(COM1)"打開COM的設置窗口:

     



    (3) 讀寫串口。

    在WIN32平臺下,對通信端口進行操作跟基本的文件操作一樣。

    創建/打開COM資源

    下列函數如果調用成功,則返回一個標識通信端口的句柄,否則返回-1:
     

    HADLE CreateFile(PCTSTR lpFileName, //通信端口名,如"COM1"
               WORD dwDesiredAccess, //對資源的訪問類型
               WORD dwShareMode, //指定共享模式,COM不能共享,該參數為0
               PSECURITY_ATTRIBUTES lpSecurityAttributes,
               //安全描述符指針,可為NULL
               WORD dwCreationDisposition, //創建方式
               WORD dwFlagsAndAttributes, //文件屬性,可為NULL
               HANDLE hTemplateFile //模板文件句柄,置為NULL
               );


    獲得/設置COM屬性

    下列函數可以獲得COM口的設備控制塊,從而獲得相關參數:
     

    BOOL WINAPI GetCommState(
               HANDLE hFile, //標識通信端口的句柄
               LPDCB lpDCB //指向一個設備控制塊(DCB結構)的指針
               );


    如果要調整通信端口的參數,則需要重新配置設備控制塊,再用WIN32 API SetCommState()函數進行設置:
     

    BOOL SetCommState(
               HANDLE hFile, //標識通信端口的句柄
               LPDCB lpDCB //指向一個設備控制塊(DCB結構)的指針
               );


    DCB結構包含了串口的各項參數設置,如下:
     

    typedef struct _DCB
               {
               // dcb
               DWORD DCBlength; // sizeof(DCB)
               DWORD BaudRate; // current baud rate
               DWORD fBinary: 1; // binary mode, no EOF check
               DWORD fParity: 1; // enable parity checking
               DWORD fOutxCtsFlow: 1; // CTS output flow control
               DWORD fOutxDsrFlow: 1; // DSR output flow control
               DWORD fDtrControl: 2; // DTR flow control type
               DWORD fDsrSensitivity: 1; // DSR sensitivity
               DWORD fTXContinueOnXoff: 1; // XOFF continues Tx
               DWORD fOutX: 1; // XON/XOFF out flow control
               DWORD fInX: 1; // XON/XOFF in flow control
               DWORD fErrorChar: 1; // enable error replacement
               DWORD fNull: 1; // enable null stripping
               DWORD fRtsControl: 2; // RTS flow control
               DWORD fAbortOnError: 1; // abort reads/writes on error
               DWORD fDummy2: 17; // reserved
               WORD wReserved; // not currently used
               WORD XonLim; // transmit XON threshold
               WORD XoffLim; // transmit XOFF threshold
               BYTE ByteSize; // number of bits/byte, 4-8
               BYTE Parity; // 0-4=no,odd,even,mark,space
               BYTE StopBits; // 0,1,2 = 1, 1.5, 2
               char XonChar; // Tx and Rx XON character
               char XoffChar; // Tx and Rx XOFF character
               char ErrorChar; // error replacement character
               char EofChar; // end of input character
               char EvtChar; // received event character
               WORD wReserved1; // reserved; do not use
               } DCB;

    讀寫串口

    在讀寫串口之前,還要用PurgeComm()函數清空緩沖區,并用SetCommMask ()函數設置事件掩模來監視指定通信端口上的事件,其原型為:
     

    BOOL SetCommMask(
               HANDLE hFile, //標識通信端口的句柄
               DWORD dwEvtMask //能夠使能的通信事件
               );


    串口上可能發生的事件如下表所示:

    事件描述
    EV_BREAKA break was detected on input.
    EV_CTSThe CTS (clear-to-send) signal changed state.
    EV_DSRThe DSR(data-set-ready) signal changed state.
    EV_ERRA line-status error occurred. Line-status errors are CE_FRAME, CE_OVERRUN, and CE_RXPARITY.
    EV_RINGA ring indicator was detected.
    EV_RLSDThe RLSD (receive-line-signal-detect) signal changed state.
    EV_RXCHARA character was received and placed in the input buffer.
    EV_RXFLAGThe event character was received and placed in the input buffer. The event character is specified in the device''''s DCB structure, which is applied to a serial port by using the SetCommState function.
    EV_TXEMPTYThe last character in the output buffer was sent.


    在設置好事件掩模后,我們就可以利用WaitCommEvent()函數來等待串口上發生事件,其函數原型為:

    BOOL WaitCommEvent(
               HANDLE hFile, //標識通信端口的句柄
               LPDWORD lpEvtMask, //指向存放事件標識變量的指針
               LPOVERLAPPED lpOverlapped, // 指向overlapped結構
               );


    我們可以在發生事件后,根據相應的事件類型,進行串口的讀寫操作:

    BOOL ReadFile(HANDLE hFile, //標識通信端口的句柄
               LPVOID lpBuffer, //輸入數據Buffer指針
               DWORD nNumberOfBytesToRead, // 需要讀取的字節數
               LPDWORD lpNumberOfBytesRead, //實際讀取的字節數指針
               LPOVERLAPPED lpOverlapped //指向overlapped結構
               );
               BOOL WriteFile(HANDLE hFile, //標識通信端口的句柄
               LPCVOID lpBuffer, //輸出數據Buffer指針
               DWORD nNumberOfBytesToWrite, //需要寫的字節數
               LPDWORD lpNumberOfBytesWritten, //實際寫入的字節數指針
               LPOVERLAPPED lpOverlapped //指向overlapped結構
               );

     

     

     

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 自动锁螺丝机_在线式拧螺丝机_自动化灌胶机_ab点胶机_品牌厂家 | 胶球清洗-射水抽气器-磷酸盐加药装置-连云港振辉机械设备有限公司 | 南京包装设计公司|南京手提袋制作|彩页印刷|礼品盒设计 | 上海眼科医院_上海希玛瑞视眼科医院【上海医保定点单位】 | 锯骨机-砍排机-全自动锯骨机-商用砍排机-切丁机 - 广州市九盈机械设备有限公司 | 斜管填料_斜板填料_纤维球_果壳活性炭_立体网状填料_纤维球厂家-巩义市德科净水材料有限公司 | 新颖科技 - 家电及汽车外饰面板供应商 | 拖链电缆-卷筒电缆-行车电缆-机器人电缆-上海甲朗制造 | 汽车漆|汽车油漆|工业油漆涂料|汽车漆加盟-佛山市科涂涂料有限公司 | 洗地机_扫地机_扫地车品牌_尘推车_工业吸尘器_山东鼎洁盛世 | 宣城安安橡塑有限责任公司 | 金华美凡文化传媒有限公司| 样品前处理仪器_光谱仪器_色谱/分析仪器_测量/计量仪器_青岛聚创世纪环保科技有限公司 | 英格索兰隔膜泵_ARO气动隔膜泵_英格索兰隔膜泵配件【原厂正品】连续五年无投诉_英格索兰隔膜泵代理-苏州瑞晟茂环保设备有限公司 印刷公司,北京印刷厂,宣传画册手册印刷厂-和智印彩页设计 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 漫画大全免费看_漫画终身版_羞羞漫画网 | 武汉凯美隆窗帘厂家_定做商用窗帘_家用遮阳帘_涵盖电动窗帘_天棚帘_遮阳棚_凯美隆-专注遮阳产品 武汉净化机-武汉全热新风换气机-武汉静音送风机-武汉东信新风节能设备有限公司 | 无锡市恒威工业气体有限公司-工业高纯气体_高纯度特种气体 | 深圳汽车贴膜_深圳全车车身改色贴膜|UPPF隐形车衣官网 | 眉山净源居环保科技有限公司,眉山除甲醛公司,眉山甲醛治理,眉山保洁服务,眉山家政保洁,眉山家电维修 - 眉山净源居环保科技有限公司,眉山除甲醛公司,眉山甲醛治理,眉山保洁服务,眉山家政保洁,眉山家电维修 | 中婴网,推动母婴产业健康·可持续发展,婴童网络专业传媒,母婴网,360孕婴童网,婴童品牌,婴儿用品品牌,婴儿用品加盟店,母婴用品加盟店 | 实验室超纯水机-超纯水机-超纯水仪-上海赫恩实业有限公司 | 柱塞泥浆泵|压滤机专用泵|陶瓷泥浆泵_咸阳华星泵业有限公司 | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 | 自复式过欠压保护器-上海能曼电气有限公司 | 鲜淘网 - 精选全球水果蔬菜肉食海产生鲜,酒水食品零食加盟供求信息 | 真石漆生产厂家|外墙水包水|水包砂-新佳官网 | 济宁卡尔迪机械制造有限公司_铁路换枕机_升降驾驶室_挖机加高底盘_加长臂 | 网带式等温正火生产线_燃气式铝合金加热炉_燃气式烘干窑炉-湖州中科炉业科技有限公司 | 智能化解决方案 智能家居 家庭影院 灯光音箱 会议室报告厅 剧场剧院 指挥中心 大数据中心_沈阳天哲科技有限公司 | 温湿度记录仪_温度监控_冷链监控云平台_USB/PDF温度记录仪-深圳市鸿睿物联科技发展有限公司 | 太阳能光伏发电_太阳能热水器_空气能热水器_直饮净水器_深圳市大兴节能环保科技有限公司 | 厦门电脑维修_上门维修电脑_笔记本电脑维修_办公设备维修 - 耐诚 | 社会百态,七仙女思春完整版免费高清电影引发的思考 | 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 | 连续式回转炉_间歇式回转炉_燃气式回转炉_电加热回转炉-长兴博达机械配件有限公司 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 江西蔬菜配送,南昌蔬菜配送,南昌食堂承包,江西饭堂承包-江西菜篮子农产品发展有限公司 | 红都服装官网-北京红都西服-红都西服定制-北京红都集团 | 聚合氯化铝pac-聚氯化铝-饮水级工业级聚合氯化铝-聚合氯化铝厂家价格 | 盐城市城镇化建设投资集团有限公司[盐城国资企业、盐城国资集团、盐城文化旅游、盐城基础设施、盐城土地开发、盐城粮食收储] |