使用WindowsAPI和多執行緒進行串列埠通訊 2

2021-06-16 01:06:22 字數 982 閱讀 3932

// 資料接收

// 接收資料的任務由readfile函式完成。該函式從串列埠接收緩衝區中讀取資料,

// 讀取資料前,先用clearcommerror函式獲得接收緩衝區中的位元組數。接收

// 資料時,同步

// 和非同步讀取的差別同傳送資料是一樣的。

// lpinbuffer為接收資料的緩衝區指標,

// dwbytestoread為準備讀取的資料長度(即位元組數)

dword cmycom::readmycom(lpvoid lpinbuffer, dword dwbytestoread)

// 關閉序列裝置

// 在整個應用程式結束或不再使用序列裝置時,應將序列裝置關閉,包括取消事

// 件監視,將裝置開啟標誌bopen置為false以使事件監視執行緒結束,清除傳送/接收緩衝

// 區和關閉裝置控制代碼。

void cmycom::closemycom()

// 事件監視執行緒

// 事件監視執行緒對串列埠事件進行監視,當監視的事件發生時,監視執行緒即執行

uint commwatchproc(lpvoid pparam)

m_mycom.writemycom(wbuf, dword(1));// 正確接收資料回寫com1埠資料1

}}if((dweventmask & ev_err) == ev_err)

}

messagebox(null, _t("exitthread"), _t("trace"), mb_ok);

setevent(hevent);

return 1;

}cwinthread*pthread = afxbeginthread(commwatchproc, m_hwnd);

// 串列埠監視程序的建立

::terminatethread(pthread, 0);// 結束串列埠監視程序

delete pthread;// 刪除串列埠監視程序指標, 該語句可以省略

使用CountDownLatch等待多執行緒

前言 countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。應用場景 假如有乙個列表的大量資料等待處理,最後全部處理完畢後返回處理結果。普通做法就是從頭遍歷,乙個個順序執行,這樣單執行緒處理效率不高,我們希望使用多執行緒的方式處理,同時在主線程等待所有子執行緒處理完成。count...

ThreadPoolExecutor 多執行緒

from concurrent.futures import threadpoolexecutor,wait,all completed from queue import queue myqueue queue 佇列,用於儲存函式執行結果。多執行緒的問題之一 如何儲存函式執行的結果。def thr...

c 多線例項

using system using system.threading using system.text namespace controlthread 第二個執行緒正在執行,請輸入 s uspend,r esume,i nterrupt,or e xit.datetime.now.tostrin...