两个线程使用 同一个 OVERLAPPED 有时报错

wanglovec 2007-05-22 05:07:45
_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


...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cczlp 2007-05-24
  • 打赏
  • 举报
回复
去掉memset(_mosRead,0,sizeof(OVERLAPPED));
wanglovec 2007-05-24
  • 打赏
  • 举报
回复
没人 遇到过吗??
cczlp 2007-05-24
  • 打赏
  • 举报
回复
OVERLAPPED初始化后,不要自己更改, 由ReadFile WriteFile返回, 你可以读
wanglovec 2007-05-24
  • 打赏
  • 举报
回复
去掉memset(_mosRead,0,sizeof(OVERLAPPED));

>>这是异步操作 ,如果去掉了 会否出现问题??

书上说 同步方式下,系统会自动的为你做 但在异步 则不会.

不知是否正确??
wanglovec 2007-05-23
  • 打赏
  • 举报
回复
自己顶
wanglovec 2007-05-22
  • 打赏
  • 举报
回复
memset(_mosRead,0,sizeof(OVERLAPPED)); //有时报错

有时候报内存错误,

是不是因为同时写的原因??? 两个线程不用同一个可以吗??

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧