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---------------------
阅读(1027) | 评论(0) | 转发(0) |