我尝试使用readfile
函数从WinCE环境中的CDC设备读取数据。
BOOL WINAPI ReadFile(
_In_ HANDLE hFile,
_Out_ LPVOID lpBuffer,
_In_ DWORD nNumberOfBytesToRead,
_Out_opt_ LPDWORD lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
我想知道readbuf
的大小限制是多少。我发送256字节数据块100次,lpNumberOfBytesRead
中的参数ReadFile
在第一次尝试时返回173字节,其余0次返回0次。请让我知道我错过了什么。 'writebuf'的大小限制是多少?下面是打开端口的代码
BOOL PortOpen()
{
Close();
ComPort = INVALID_HANDLE_VALUE;
COMMTIMEOUTS ct;
ComPort=CreateFile (TEXT("COM1:"), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (ComPort != INVALID_HANDLE_VALUE) {
dcb.DCBlength = sizeof (dcb);
GetCommState (hLocal, &dcb);
dcb.BaudRate = 115200;
dcb.fParity = FALSE;
dcb.fNull = FALSE;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
SetCommState (ComPort, &dcb);
ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 0;
ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
SetCommTimeouts (hLocal, &ct);
}
梁
答案 0 :(得分:0)
可以使用SetCommTimeouts API配置ReadFile操作的超时,您确定您的代码没有调用它吗?在这种情况下,返回的字节数可能会有所不同,具体取决于您设置的不同超时参数。
答案 1 :(得分:0)
谢谢你的回复!我的问题已经解决了。 WindowCE不支持重叠的I / O,读取和写入需要在分离的线程中。另外,为了避免竞争条件,我使用了信号量。
梁