使用ReadFile()时如何更改ReadFile的timeout

使用ReadFile()函数时,当在N秒内没有收到自己定义的数据包,则会timeout。那么N秒的具体时间如何定义?

异步方式(OVERLAPPED)打开,即ReadFile()最后一个参数关联一个OVERLAPPED指针,然后用WaitForSingleObject去等待这个异步的句柄,即可实现。

WaitForSingleObject()函数的第二个参数,即可简单理解为timeout时间。

 

WaitForSingleObject的用法

DWORDWaitForSingleObject  (  HANDLEhHandle,   DWORDdwMilliseconds );

参数 hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回 WAIT_OBJECT_0,如果时间超过 dwMilliseconds值但时间事件还是无信号状态则返回 WAIT_TIMEOUT 。

WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMillisecondsINFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。

http://www.cnblogs.com/andyhere/archive/2008/10/20/1314803.html

 

程序实例:

<span style="font-size:14px;">/*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;
		}
	}	</span>


reference:http://bbs.eeworld.com.cn/thread-150077-1-1.html

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值