使用Windows API和多執行緒進行串列埠通訊[1] (轉)
用操作串列埠:namespace prefix = o ns = "urn:schemas--com::office" />
// MyCom.h
UINT CommWatchProc(LPVOID pParam); // 串列埠監視執行緒
class CMy
{
public:
CMyCom();
~CMyCom();
BOOL SetupMyCom(); // 初始化埠
BOOL WriteMyCom(LPVOID lpSnuffer, D dwBytesToWrite); // 寫埠
DWORD ReadMyCom(LPVOID lpInBuffer, DWORD dwBytesToRead=35); // 讀埠
void CloseMyCom(); // 關閉埠
};
// MyCom.cpp
// 裝置的初始化
// 利用CreateFile函式實現,該函式獲得序列裝置控制程式碼並對其進行通訊引數設定
// 包括設定輸出/接受緩衝區大小、超時控制和事件監視等
BOOL CMyCom::SetupMyCom()
{
DCB dcb;
COMMTIMEOUTS timeouts;
if(bOpen)return FALSE; // 串列埠被佔用
// 開啟COM1
hComDev = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hComDev == INVALID_HANDLE_VALUE)
{
// MessageBox(NULL, _T("埠被佔用,列印不能繼續執行!"), _T("TRACE"), MB_OK);
return FALSE; // 開啟埠失敗
}
// 設定超時控制
SetCommTimeouts(hComDev, &timeouts);
// 設定接收緩衝區和輸出緩衝區的大小
SetupComm(hComDev, 1024, 512);
// 獲取預設的DCB結構的值
GetCommState(hComDev, &dcb);
// 設定波特率為9600 bps
dcb.BaudRate = CBR_9600;
// 設定無奇偶校驗
dcb.fParity = NOPARITY;
// 設定資料位為8
dcb.ByteSize = 8;
// 設定一個停止位
dcb.StopBits = ONESTOPBIT;
// 設定相應監視串列埠的錯誤和接收到字元兩種事件響應
SetCommMask(hComDev, EV_ERR|EV_RXCHAR);
// 設定序列裝置控制引數
SetCommState(hComDev, &dcb);
// 設定參數列示裝置已開啟
bOpen = TRUE;
// 建立一個人工重設,
hEvent = CreateEvent(NULL, FALSE, FALSE, "WatchEvent");
return TRUE;
}
// 資料傳送
// 資料傳送利用WriteFile函式實現。對於同步I/O操作,它的最後一個引數可為
// NULL;而對非同步I/O操作,它的最後一個引數必需是一個指向OVERLAPPED結構的指標,
// 透過OVERLAPPED結構來獲得當前的操作狀態。
// lpSndBuffer為傳送資料緩衝區指標,
// dwBytesToWrite為將要傳送的位元組長度
BOOL CMyCom::WriteMyCom(LPVOID lpSndBuffer, DWORD dwBytesToWrite)
{
BOOL bWriteState;
DWORD dwBytesWritten; // 實際傳送的位元組數
if(!bOpen)return FALSE; // 串列埠未開啟
bWriteState = WriteFile(hComDev, lpSndBuffer, dwBytesToWrite, &dwBytesWritten, NULL);
if(!bWriteState || (dwBytesToWrite != dwBytesWritten))
return FALSE; // 傳送資料失敗
return TRUE;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974833/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在VB中利用API進行串列埠通訊API串列埠
- 通過串列埠進行通訊 :串列埠
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- Java多執行緒-執行緒通訊Java執行緒
- 多執行緒、重疊I/O的通訊埠元件 (轉)執行緒元件
- 徹底明白Java的多執行緒-執行緒間的通訊(1)(轉)Java執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- .NET多執行緒程式設計(1):多工和多執行緒 (轉)執行緒程式設計
- 使用Modbus4J進行RTU模式串列埠通訊模式串列埠
- java多執行緒5:執行緒間的通訊Java執行緒
- 多執行緒之間通訊及執行緒池執行緒
- 執行緒通訊初探 (轉)執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 徹底明白Java的多執行緒-執行緒間的通訊(2)(轉)Java執行緒
- 串列埠通訊 (轉)串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- 多執行緒之間的通訊執行緒
- java多執行緒間的通訊Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- windows多執行緒同步--訊號量Windows執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- 多執行緒和多執行緒同步執行緒
- 多執行緒-執行緒組的概述和使用執行緒
- 多執行緒-執行緒池的概述和使用執行緒
- 程式通訊 執行緒通訊執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- 執行緒4--執行緒間通訊執行緒
- JavaThread多執行緒同步、鎖、通訊Javathread執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 多執行緒:執行緒池理解和使用總結執行緒
- Java多執行緒/併發11、執行緒同步通訊:notify、waitJava執行緒AI
- Java執行緒通訊Java執行緒
- 執行緒通訊舉例1 管程法執行緒
- Linux 串列埠程式設計 使用termios與API進行串列埠程式開發Linux串列埠程式設計iOSAPI
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- JAVA - 基於Socket的多執行緒通訊Java執行緒