您好,我有一個關於通訊端口異步讀取的問題。C如何使用異步讀取文件
我有一個函數,它應該從通信端口讀取一個字節異步。這個函數每10ms調用一次。我試圖做到同步,但一個緩衝區溢出,因爲該函數被稱爲更快,比它可以完成。 現在我想實現它異步。但不明白它是如何工作的。
我的函數調用(被稱爲每隔10毫秒):
// read one byte into receiveChar
bytesReceived = BSP_cliGetChar(&receiveChar);
函數體
int BSP_cliGetChar(char *rxBuffer)
{
DWORD numOfBytesRead;
OVERLAPPED readOverlapped;
HANDLE hEvent;
BOOL fOverlapped;
char str[255];
hEvent = CreateEvent(NULL, // default security attribute
TRUE, // manual-reset event
TRUE, // initial state = signaled
NULL); // unnamed event object
// set up overlapped structure fields
readOverlapped.Offset = 0;
readOverlapped.OffsetHigh = 0;
readOverlapped.hEvent = hEvent;
if (!ReadFile(hComm, rxBuffer, 1, &numOfBytesRead, &readOverlapped))
{
if (GetLastError() != ERROR_IO_PENDING)
{
// Some other error occurred while reading the file.
ExitProcess(0);
}
else
fOverlapped = TRUE;
}
else
{
// Operation has completed immediately.
fOverlapped = FALSE;
return (int) numOfBytesRead;
}
while(!HasOverlappedIoCompleted(&readOverlapped))
{
sprintf_s(str, "%d", &numOfBytesRead);
OutputDebugString(str);
}
}
現在,我想要的是讀取COM端口一個字節。如果返回ERROR_IO_PENDING,則調用函數應該繼續。只有收到一個字節時,BSP_cliGetChar函數纔會返回。問題是,該方法停留在while循環中,而不是繼續調用過程。
任何人有想法如何解決這個問題?
謝謝你的幫助。