两个线程使用 同一个 OVERLAPPED 有时报错
_fastcall ExpensIoThread::ExpensIoThread(TEvent*BeginProduce,Asynusb*commusb,char *buffer,int numbe, OVERLAPPED*mosRead):TThread(true)
{
_mosRead=mosRead;
}
//---------------------------------------------------------------------------
void _fastcall ExpensIoThread::Execute(void)//发起一个I/O操作
{
unsigned long ByteNumber=0;
while(!Terminated)
{
if (_BeginProduce->WaitFor(600)==wrSignaled)//有信号状态
{
memset(_mosRead,0,sizeof(OVERLAPPED)); //有时报错
if(_commusb->Hpipe != INVALID_HANDLE_VALUE)
{
ReadFile(_commusb->Hpipe, &_buffer[0], _numbe, &ByteNumber, _mosRead);
}
}
}
}
_fastcall AcceptDataThread::AcceptDataThread(TEvent*BeginProduce,Asynusb*commusb,char *buffer,
int resvnumber,OVERLAPPED*mosRead,ProcessData*prodata):TThread(true)
{
_mosRead=mosRead;
}
void _fastcall AcceptDataThread::Execute(void)
{
unsigned long nBytesRead=0;
while(!Terminated)
{
if ( GetOverlappedResult(_commusb->Hpipe,_mosRead,&nBytesRead, true))
{
}
}
}
这两个线程都使用同一个 公共的 OVERLAPPED