Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2350808
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:02:33

char SendBuf[SendBufSize];
DWORD BytesSent=0, BytesToSend=要发送的字节数;
COMSTAT ComStat;
DWORD dwBytesWr;
int iSingled;
HANDLE OvlWriteWaits[2] = {hKillWrite, WriteOS.hEvent}; //hKillWrite 为强制终止正在进行中的写动作的事件
bool bRun = true; //可以通过设这个变量等于 false, 并且触发 hKillWrite 来强制终止写线程

while((bRun)&&(BytesSent{
  if(WriteFile(CommHandle, SendBuf+BytesSent, BytesToSend-BytesSent, &dwBytesWr, &WriteOS))
   {
     BytesSent+=dwBytesWr; //已经发送的字节数 加上 刚发送出去的字节数
   }
  else if(GetLastError()==ERROR_IO_PENDING) //上一个 WriteFile 指令正在进行中, 非同步写工作未完成 (并不是真正的错误)
   {
     iSingled = WaitForMultipleObjects(2, OvlWriteWaits, false, INFINITE); //等待写工作的完成
     if((!bRun) || (iSingled==WAIT_OBJECT_0))
       break;
     if(GetOverlappedResult(CommHandle, &WriteOS, &dwBytesWr, false)) //读出已经发送的字节数到 dwBytesWr
       BytesSent+=dwBytesWr; //已经发送的字节数 加上 刚发送出去的字节数
   }
}

--------------------next---------------------

阅读(1031) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~