MFC 异步通信失误 请大神指点
MFC 异步通信出错 请大神指点
1.// 打开设备
void CUSBDlg::OnOpenDevice()
{
hHandle=CreateFile( //打开 启动设备
strDevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,// 设置异步通信模式
NULL );
}
2.
void CUSBDlg::OnWriteData()
{
//注意: 启用最后 1 个接口发送 读取数据
if(hHandle==INVALID_HANDLE_VALUE)
{
MessageBox(_T("设备接口没有打开"));
return ;
}
int x=0,y=0;
BYTE WriteBuffer[64]={0};
BYTE ReadBuffer[64]={0};
WriteBuffer[0]=0x04;
WriteBuffer[1]=0x50;
DWORD DataByteCount=0; //实际读写的字节数
DWORD i;
BOOL bR;
OVERLAPPED nOverlapped;
HANDLE ReportEvent;
int err;
ReportEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
nOverlapped.Offset = 0;
nOverlapped.OffsetHigh = 0;
nOverlapped.hEvent = ReportEvent;
bR=WriteFile(hHandle,WriteBuffer,64,&DataByteCount,(LPOVERLAPPED)&nOverlapped);
err=GetLastError(); 返回值为997, 表示IO操作正在进行
//为什么这里会发生这种错误,不明白到底是什么原因造成 IO操作正在进行,请各位大神,指点下
WaitForSingleObject(ReportEvent, 100); // 等待 变为有信号
ResetEvent(ReportEvent); // 设置其无信号
CloseHandle(ReportEvent);
}
------解决方案--------------------
WriteFile函数异步模式调用,则立即返回,不需要等待函数发送数据结束,所以就是表示正在进行IO操作了。
1.// 打开设备
void CUSBDlg::OnOpenDevice()
{
hHandle=CreateFile( //打开 启动设备
strDevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,// 设置异步通信模式
NULL );
}
2.
void CUSBDlg::OnWriteData()
{
//注意: 启用最后 1 个接口发送 读取数据
if(hHandle==INVALID_HANDLE_VALUE)
{
MessageBox(_T("设备接口没有打开"));
return ;
}
int x=0,y=0;
BYTE WriteBuffer[64]={0};
BYTE ReadBuffer[64]={0};
WriteBuffer[0]=0x04;
WriteBuffer[1]=0x50;
DWORD DataByteCount=0; //实际读写的字节数
DWORD i;
BOOL bR;
OVERLAPPED nOverlapped;
HANDLE ReportEvent;
int err;
ReportEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
nOverlapped.Offset = 0;
nOverlapped.OffsetHigh = 0;
nOverlapped.hEvent = ReportEvent;
bR=WriteFile(hHandle,WriteBuffer,64,&DataByteCount,(LPOVERLAPPED)&nOverlapped);
err=GetLastError(); 返回值为997, 表示IO操作正在进行
//为什么这里会发生这种错误,不明白到底是什么原因造成 IO操作正在进行,请各位大神,指点下
WaitForSingleObject(ReportEvent, 100); // 等待 变为有信号
ResetEvent(ReportEvent); // 设置其无信号
CloseHandle(ReportEvent);
}
异步通信
MFC
------解决方案--------------------
WriteFile函数异步模式调用,则立即返回,不需要等待函数发送数据结束,所以就是表示正在进行IO操作了。