您可能正在使用的另一個API調用是WaitCommEvent()
。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363479(v=vs.85).aspx
,因爲它需要一個OVERLAPPED
對象作爲參數調用這個可以異步工作。在你的情況,你會想幹脆就EV_RXCHAR
事件等,讓你知道數據已經到達:
OVERLAPPED o = {0};
o.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
SetCommMask(comPortHandle, EV_RXCHAR);
if (!WaitCommEvent(comPortHandle, &commEvent, &o))
{
// Check GetLastError for ERROR_IO_PENDING, if I/O is pending then
// use WaitForSingleObject() to determine when `o` is signaled, then check
// the result. If a character arrived then perform your ReadFile.
}
另外,您可以通過具有螺紋具有傑出ReadFile
通話,但使用OVERLAPPED
做同樣的事情對象,而不是像MSalters建議的那樣阻塞。
使用線程和阻塞相當粗糙。異步I/O更好。 – MSalters