KsWaitCommEvent
此函式是否可用依裝置支援項目而定。
等待指定通訊裝置發生事件,此函式所監視的事件集包含在與裝置控制代碼關聯的事件遮罩中。
語法
BOOL KsWaitCommEvent(
HANDLE hFile,
LPDWORD lpEvtMask,
LPOVERLAPPED lpOverlapped
);
參數
hFile:通訊裝置的控制代碼,KsCreateComm 函式回傳此控制代碼。
lpEvtMask:接收變數的指標,該變數指出發生之事件類型的遮罩,若發生錯誤,則值為零,否則為以下其中之一值:
值 | 說明 |
---|---|
EV_BREAK 0x0040 |
輸入偵測到中斷。 |
EV_CTS 0x0008 |
清除發送 (clear-to-send, CTS) 訊號狀態改變。 |
EV_DSR 0x0010 |
資料集備妥 (data-set-ready, DSR) 訊號狀態改變。 |
EV_ERR 0x0080 |
發生線路狀態錯誤。線路狀態錯誤為 CE_FRAME、CE_OVERRUN 與CE_RXPARITY。 |
EV_RING 0x0100 |
偵測到振鈴指示器。 |
EV_RLSD 0x0020 |
接收線路訊號檢測 (receive-line-signal-detect, RLSD ) 訊號狀態改變。 |
EV_RXCHAR 0x0001 |
字元已接收且置於輸入緩衝區。 |
EV_RXFLAG 0x0002 |
事件字元已接收且置於輸入緩衝區,事件字元在裝置的 DCB 結構中指定,其使用 KsSetCommState 套用至串聯埠。 |
EV_TXEMPTY 0x0004 |
輸出緩衝區的最後一個字元已傳送。 |
lpOverlapped:OVERLAPPED 結構的指標,用 FILE_FLAG_OVERLAPPED
開啟 hFile 時需此結構。
若使用 FILE_FLAG_OVERLAPPED
開啟 hFile , lpOverlapped 參數不得為 NULL,且必須指向有效的 OVERLAPPED 結構;若用 FILE_FLAG_OVERLAPPED
開啟 hFile 且 lpOverlapped 為 NULL,函式可能錯誤回報此作業已完成。
若用 FILE_FLAG_OVERLAPPED
開啟 hFile 且 lpOverlapped 非 NULL, KsWaitCommEvent 會如重疊作業般運作,如此,OVERLAPPED 結構須包含手動重置事件物件的控制代碼(使用 CreateEvent 函式創建)。
若非用 FILE_FLAG_OVERLAPPED
開啟 hFile,KsWaitCommEvent 在指定事件或錯誤發生前不會回傳。
回傳值
若函式執行成功將回傳 TRUE;失敗將回傳 FALSE。欲獲取延伸錯誤資訊請呼叫 GetLastError。
備註
KsWaitCommEvent 函式為指定的通訊資源監控一組事件,欲設定及查詢通訊資源的當前事件遮罩,請使用 KsSetCommMask 與 KsGetCommMask 函式。
若重疊作業無法立即完成,函式將回傳 FALSE 而 GetLastError 函式將回傳 ERROR_IO_PENDING
,表示作業正在背景執行,發生此情況時,系統會在 KsWaitCommEvent 回傳之前將 OVERLAPPED 結構的 hEvent
成員設置為非信號狀態,然後在指定事件或發生錯誤時將其設置為有信號狀態,呼叫過程可使用 wait 內其中一個函式來確定事件物件的狀態,然後使用 KsGetOverlappedResult 函式來確定 KsWaitCommEvent 運作的結果,KsGetOverlappedResult 將回報運作成功與否,而lpEvtMask 參數指向的變數將設定來指示發生的事件。
若處理序在重疊的 KsWaitCommEvent 操作正在進行時,嘗試使用 KsSetCommMask 函式更改裝置控制代碼的事件遮罩,則 KsWaitCommEvent 將立即轉回,lpEvtMask 參數指向的變數設定為零。
範例
N/A
使用需求
RT | Win32 | |
---|---|---|
最低支援版本 | 4.0 | 4.0 |
標頭檔 | kscom.h | kscom.h |
程式庫 | KsApi_Rtss.lib | ksapi.h |
參見