我的程序目的:
在同步情况下测试超时参数的设置对串口读写的影响。
下面是超时结构体:
typedef struct _COMMTIMEOUTS {  
DWORD ReadIntervalTimeout;  
DWORD ReadTotalTimeoutMultiplier;  
DWORD ReadTotalTimeoutConstant;  
DWORD WriteTotalTimeoutMultiplier;  
DWORD WriteTotalTimeoutConstant;

我在程序中对超时参数的设置如下:
ReadIntervalTimeout = 1000;
ReadTotalTimeoutMultiplier = 0;
ReadTotalTimeoutConstant = 0;
WriteTotalTimeoutMultiplier = 0;
WriteTotalTimeoutConstant = 0;我是用的自环的串口(就是串口的2 3 两根线对接的那种)
当我程序跑起来的时候,我先开启发送线程发送数据,接着开启接收线程接收数据,问题来了,当接收完数据后(即串口布在写数据了),再在一次读串口(接收数据)的时候发现程序根本不往下走了!补充一下:以上都在vc6.0下单步跑的以便能看清楚问题出在哪。可是当我把超时读参数设置如下:
ReadTotalTimeoutMultiplier = 10;
ReadTotalTimeoutConstant = 100;
ReadIntervalTimeout不用修改,当接收线程接收完数据后在一次读串口的时候发现“过了一会”就又可以往下执行了。好奇怪!我查了好多资料,都说如果把ReadTotalTimeoutMultiplier;ReadTotalTimeoutConstant ;
都设置为0那么读操作会立即返回布管有没有读完,这是怎么回事啊?跟我做的实验恰恰相反啊!
大虾们 求问啊?

解决方案 »

  1.   

    MSDN:
    A value of zero for both the ReadTotalTimeoutMultiplier and ReadTotalTimeoutConstant members indicates that total time-outs are not used for read operations.也即是说都是0的时候就会永等在那里,直到收到足够数据
      

  2.   

    是的啊?一直等下去,关键是我已经不发数据了啊!还有我要补充一点刚才忘了说了:就是我在不往串口写数据的时候那个readfile函数一直返回是1。是不是因为是同步的问题?好像读这边一直都认为要有数据到一样,实际收到的也是0字节!大虾求!
      

  3.   

    ReadFile的返回值BOOL,是读取这个操作是否成功,不是读取到多少个字节。
    即使没读取到数据,如果的读取过程没出错也会返回TRUE
      

  4.   

    哦,哪第二次在读的时候为什么会等一会呢!前提是ReadTotalTimeoutMultiplier;ReadTotalTimeoutConstant ;
    不全为0,以后再读的话就很快能过去,不用等了即便读到字节数为0!这是为什么呢!再求!
      

  5.   

    还有就是,什么情况下会读操作不成功返回false呢!同步情况下!