问关于串口通信的WaitForSingleObject的问题(100)

  • 主题发起人 主题发起人 ljy851011
  • 开始时间 开始时间
L

ljy851011

Unregistered / Unconfirmed
GUEST, unregistred user!
try RichEdit1.GetTextBuf(pDataToWrite,dwNumberOfBytesToWrite); FillChar(Write_Os,SizeOf(write_os),0); //为重叠写创建事件对象 Write_Os.hEvent := CreateEvent(nil,True,False,nil); SetCommMask(hNewCommFile,EV_TXEMPTY); StatusBar1.Panels[1].Text := ' 正在发送数据...!'; repeat //发送通讯数据 if not WriteFile( hNewCommFile,pDataToWrite[dwWhereToStartWriting],dwNumberOfBytesToWrite,dwNumberOfBytesWritten,@write_os ) then begin ErrorFlag :=GetLastError; if ErrorFlag<>0 then begin if ErrorFlag=ERROR_IO_PENDING then begin WaitForSingleObject(Write_Os.hEvent,INFINITE); //不明白这里为什么没进行返回值的判断呢 //也可以继续执行,因为此刻的Write_Os.hEvent处于无信号状态,下一次该函数的循环判断还可以引用吗? //如果是可以继续引用的话,那么这个无信号和没信号的判断到底用在什么地方呢?这个问题一直迷茫 GetOverlappedResult(hNewCommFile,Write_os, dwNumberOfBytesWritten,False); //这里面是把最后一个参数设置为false了,就是说立即返回的意思,dwNumberOfBytesWritten里面的数据大小的值 //应该就是已经发出去的数据吧?这个我想的对吗? end else begin MessageBox(0,'WriteFile Error!','Notice',MB_OK); Receive :=False; CloseHandle(Read_Os.hEvent); CloseHandle(Post_Event); CloseHandle(hNewCommFile); Exit; end; end; end; Dec( dwNumberOfBytesToWrite, dwNumberOfBytesWritten ); Inc( dwWhereToStartWriting, dwNumberOfBytesWritten ); until (dwNumberOfBytesToWrite <= 0); // Write the whole thing! StatusBar1.Panels[2].Text := IntToStr(dwWhereToStartWriting); finally StrDispose(pDataToWrite); end; CloseHandle(hNewCommFile); end;我的QQ:339468465,一直在线等待帮助,谢谢
 
后退
顶部