到底完成端口之完成key指向的数据结构是不是需要互斥访问?代码见内

csoapy 2006-09-01 05:55:16

for this struct :
// the completion key point to it:
typedef struct _OVERLAPPEDPLUS
{
OVERLAPPED ol;
SOCKET s, sclient;
int OpCode;
char recvBuf[512],sendBuf[512];
DWORD dwBytes, dwFlags;
// other useful information
}OVERLAPPEDPLUS;

the mem of recvBuf[]and sendBuf[] should be protected when i use IOCP?

thanks.
...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2006-09-04
  • 打赏
  • 举报
回复
找找别人的例子看看吧,这样的理解是不行的,要多看msdn和别人的心得,一句话,不用你自己考虑同步的问题
csoapy 2006-09-02
  • 打赏
  • 举报
回复
只在WSARecv的时候才投递这个OV,
------------------------------------
是在WSASend的时候将lpOVERLAPPED指针置为NULL呢?还是扩展OVERLAPPED结构时候,像《win32多线程程序设计》里面那样用两个OVERLAPPED结构(一个in,一个out,out的hEvent|=1)?
peibosys 2006-09-02
  • 打赏
  • 举报
回复
建议你在OV扩展结构尽量简单化,既然要用IOCP,说明连接数量大建议你只保
留Rcvbuf[]就行了,只在WSARecv的时候才投递这个OV,这样既好判断收发
if(lpkey == lpov)//响应接收
{

}
else//响应发送或者其他
{

}
如果你的lpov是动态分配的,delete lpov的时候得要考虑下线程同步的问题了
csoapy 2006-09-02
  • 打赏
  • 举报
回复
互斥啥啊,估计你还没有弄明白这个OVERLAPPED到底是怎么回事

------------------------------------
那么就是说,IOCP的工作线程,不论有多少个,IOCP机制就用我的OVERLAPPED中的hEvent来同步操作我的缓冲区?以防止下面的情形:
  当某一线程正在处理一个客户端送来的数据时,完成端口会把同一客户端紧接着送来的数据,提交给另一个线程。这个时候就要同步读写缓冲区了不是?但不是我自己同步,这几个工作线程都用一个hEvent来同步。
  是这样吗?
mme 2006-09-01
  • 打赏
  • 举报
回复
互斥啥啊,估计你还没有弄明白这个OVERLAPPED到底是怎么回事

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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