C 基於事件驅動的多串列埠多執行緒串列埠通訊軟體架構設計

2021-06-30 16:37:54 字數 1095 閱讀 3017

最近寫乙個串列埠通訊程式,客戶對介面,容量要求都比較高。要求支援多串列埠同時工作。於是自己提煉了乙個架構,用於拋磚引玉。 本來想用vc,基於成本考慮,決定採用.net,而且c#的事件比vc的訊息容易控制些,只是跨執行緒觸發的時候稍微注意下。

先上個圖

上圖是整個通訊控制架構,根據配置檔案載入例項,每個串列埠開啟乙個執行緒用以處理命令佇列。命令加以優先順序來區分輕重緩急。

public class commpakcollection : system.collections.collectionbase

}public commpak add(commpak ocln)

list.insert(ipos, ocln);

return ocln;

}.....

}執行緒體:

public void threadmain( )

thread.sleep(5);}}

下圖是命令的基類, 各命令根據具體情況從此類派生,來處理各自的輸入輸出。

接收到資料或者異常時觸發事件

protected void reporterror(devicereturneventargs oarg)

public class devicereturneventargs : eventargs

//錯誤訊息

public string message = string.empty;

//錯誤**

public commerrortypes error = commerrortypes.noerror;

//正確執行後,返回的資料報

public commrecvpak revcpak;

}

c 多串列埠多執行緒接收資料

因為前段時間需要用到串列埠接收資料,且使用的串口號不確定,需採用多執行緒的方式來實現接收。建立執行緒 thread thread null for int i 0 i portnum i 根據選擇的串口號數量建立對應數量的執行緒 執行緒執行函式 public static void run stri...

基於C 11的事件驅動框架

嵌入式開發中對資源是有嚴格的要求的,在學校的時候一直使用qt,可是qt庫越來越大,在一些低端的嵌入式裝置上,我們可能只是簡單的幾個介面。這裡我想基於opengl開發乙個簡單的程式框架,用來開速開發嵌入式系統應用。本專案現在已經實現了事件迴圈系統,並且可以正常工作。小弟第一次搭建ui框架,可是資料太少...

程式設計基礎 C 多執行緒入門6 事件處理的需求

原始c 標準僅支援單執行緒程式設計。新的c 標準 稱為c 11或c 0x 於2011年發布。在c 11中,引入了新的執行緒庫。因此執行本文程式需要c 至少符合c 11標準。在本文中,我們將討論多執行緒中事件處理的需求。有時,執行緒需要等待事件發生,例如條件變為真或任務由另乙個執行緒完成。假設我們正在...