问题1,我需要循环调用DeviceIoControl接收数据,但不知道发送方要发送多少
while(true)
{
DeviceIoControl(。。)//同步的话,有没有办法设置超时??
}问题2,如果异步调用DeviceIoControl,对于这种循环调用DeviceIoControl,应该怎么写是不是要创建无数的event 啊??(求简单源代码)下面是我的想法(肯定不对吧)
HANDLE event=createevent(null,false,false,"chl");
while(true)
{LPOVERLAPPED lp={0}
DeviceIoControl(。。)//异步
}}另一个线程
waitforsingleobject(event)  
然后判断数据,但这到底是哪个DeviceIoControl的数据呢??

解决方案 »

  1.   

    2.一个DeviceIoControl需要一个OVERLAPPED,而一个OVERLAPPED对应一个event,有多少个DeviceIoControl就需要多少个Event,但是可以考虑循环使用Event,避免创建无限个Event对象。
    3.WaitForMultipleObjects等待,根据Event,计算对应的DeviceIoControl
      

  2.   

    1、与具体设备有关,通讯方面的设备有可能允许设置超时时间,查一下该设备的有关资料。
    2、异步的目的在于利用I/O的等待时间来执行其它操作,从而充分利用系统资源来提高性能。循环不停地执行异步I/O是没有意义的。
      

  3.   

    3楼,同步的deviceiocontrol怎么设置超超时呢?因为我没有在deviceiocontrol参数的地方找到超时设置啊,还是说这个超时是发送方搞定的??
      

  4.   

    但这到底是哪个DeviceIoControl的数据呢
    =====================================长度固定,次数不定,那你怎么还不知道 他要发多少呢?
    DWORD ret = WaitForSingleObject(hEvent, 1000);   //这个地方你可以设置超时   
    if( ret == TIME_OUT )   
    {   
         ..超时处理..   
    }   
      

  5.   

    超时不是通过DeviceIoControl这个函数的参数设置,如果设备支持,有两种可能的形式,一种是通过一个单独的控制码来设置,另一种是InBuffer是一个结构,结构中有一个成员表示超时时间。