ReadFile()の使用時にReadFileのtimeoutを変更する方法
ReadFile()関数を使用すると、N秒以内に自分で定義したパケットが受信されない場合、timeoutになります.では、N秒の具体的な時間はどのように定義されますか?
非同期方式(OVERLPPED)で開き、すなわちReadFile()の最後のパラメータでOVERLPPEDポインタを関連付け、WaitForSingleObjectでこの非同期ハンドルを待つことで実現する.
WaitForSingleObject()関数の2番目のパラメータは、timeout時間と簡単に理解できます.
WaitForSingleObjectの使い方
DWORDWaitForSingleObject ( HANDLEhHandle, DWORDdwMilliseconds );
パラメータhHandleはイベントのハンドルであり、2番目のパラメータdwMillisecondsは時間間隔である.時間が信号状態であればWAIT_に戻るOBJECT_0時間がdwMilliseconds値を超えても時間イベントが無信号の場合WAIT_を返すTIMEOUT .
WaitForSingleObject関数はhHandleイベントの信号状態を検出するために使用され、関数の実行時間がdwMillisecondsを超えると返されますが、パラメータdwMillisecondsがINFINITEの場合、関数は対応する時間イベントが信号状態になるまで返されます.そうしないと、WaitForSingleObjectが戻ってくるまで待っています.
http://www.cnblogs.com/andyhere/archive/2008/10/20/1314803.html
プログラムの例:
reference:http://bbs.eeworld.com.cn/thread-150077-1-1.html
非同期方式(OVERLPPED)で開き、すなわちReadFile()の最後のパラメータでOVERLPPEDポインタを関連付け、WaitForSingleObjectでこの非同期ハンドルを待つことで実現する.
WaitForSingleObject()関数の2番目のパラメータは、timeout時間と簡単に理解できます.
WaitForSingleObjectの使い方
DWORDWaitForSingleObject ( HANDLEhHandle, DWORDdwMilliseconds );
パラメータhHandleはイベントのハンドルであり、2番目のパラメータdwMillisecondsは時間間隔である.時間が信号状態であればWAIT_に戻るOBJECT_0時間がdwMilliseconds値を超えても時間イベントが無信号の場合WAIT_を返すTIMEOUT .
WaitForSingleObject関数はhHandleイベントの信号状態を検出するために使用され、関数の実行時間がdwMillisecondsを超えると返されますが、パラメータdwMillisecondsがINFINITEの場合、関数は対応する時間イベントが信号状態になるまで返されます.そうしないと、WaitForSingleObjectが戻ってくるまで待っています.
http://www.cnblogs.com/andyhere/archive/2008/10/20/1314803.html
プログラムの例:
/*API call:ReadFile
'Returns: the report in InputReport.
'Requires: a device handle returned by CreateFile
'(for overlapped I/O, CreateFile must be called with FILE_FLAG_OVERLAPPED),
'the Input report length in bytes returned by HidP_GetCaps,
'and an overlapped structure whose hEvent member is set to an event object.
*/
if (ReadHandle != INVALID_HANDLE_VALUE)
{
Result = ReadFile
(ReadHandle,
InputReport,
Capabilities.InputReportByteLength,
&NumberOfBytesRead,
(LPOVERLAPPED) &HIDOverlapped
);
}
// DisplayLastError("ReadFile: ") ;
/*API call:WaitForSingleObject
'Used with overlapped ReadFile.
'Returns when ReadFile has received the requested amount of data or on timeout.
'Requires an event object created with CreateEvent
'and a timeout value in milliseconds.
*/
Result = WaitForSingleObject
(hEventObject,
20000); // timeout
switch (Result)
{
case WAIT_OBJECT_0:
{
//
break;
}
case WAIT_TIMEOUT:
{
// timeout
break;
}
}
reference:http://bbs.eeworld.com.cn/thread-150077-1-1.html