来源:本站整理 作者:佚名 2011-08-25 14:57:42
对串行端口来说,必须配置超时值,否则程序可能陷入到一个循环来等待来自串口的字符。这对采用Windows CE的设备来说,将大大减少设备电池的使用时间,所以超时值是需要配置的。另外一种解决办法就是采用多线程。多线程将在下一部分讲述。通常,配置超时值和配置串口类似。首先用GetCommTimeouts函数获得当前串口的超时值。然后可以修改COMMTIMEOUT成员,最后用SetCommTimeouts函数设定超时值。
COMMTIMEOUTS CommTimeouts; //定义COMMTIMEOUTS结构
GetCommTimeouts(hPort,&CommTimeouts); //获得当前的超时值
//修改COMMTIMEOUT成员
CommTimeouts.ReadIntervalTimeout=MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier=0;
CommTimeouts.ReadTotalTimeoutConstant=0;
CommTimeouts.WriteTotalTimeoutConstant=1000;
CommTimeouts.WriteTotalTimeoutMultiplier=10;
SetCommTimeouts(hPort,&CommTimeouts); //设定超时值
(3)读写串行端口-用ReadFile和WriteFile函数读写串行口。
int rc;
DWORD cBytes;
BYTE ch;
Rc=ReadFile(hPort,&ch,1,&cBytes,NULL);
其中第一个参数是串口句柄,第2个参数是读回的字符,第3个参数是要读取的字符数量,第4个参数返回实际读取到的字符数量。
Int rc;
DWORD cBytes;
BYTE ch=TEXT(“a”);
Rc=WriteFile(hPort,&ch,1,&cBytes,NULL);
其中第一个参数是串口句柄,第2个参数是要写入的字符,第3个参数是要写入的字符数量,第4个参数返回字符写入的字符数量。需要注意的是Windows CE不支持重叠I/O,所以如果在主线程进行大量读写串口操作时,有可能使整个程序陷入缓慢的串口等待中去,因此一般都采用多线程来进行读写串口操作。上一页 [1] [2] [3] [4] 下一页
关键词: