扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:delphilxh 来源:Delphi先锋网 2007年10月31日
关键字:
procedure WorkerRoutine( const dwError, cbTransferred : DWORD; const lpOverlapped : LPWSAOVERLAPPED; const dwFlags : DWORD ); stdcall; |
WSARecv( m_socket, @FBuf, 1, dwTemp, dwFlag, @m_overlap, WorkerRoutine ); |
while ( not Terminated ) do//这就是一个Recv/Send线程要做的事情......什么都不用做啊!!! begin if SleepEx( RECV_TIME_OUT, True ) = WAIT_IO_COMPLETION then // begin ; end else begin continue; end; end; |
//创建一个完成端口 FCompletPort := CreateIoCompletionPort( INVALID_HANDLE_VALUE, 0,0,0 ); //接受远程连接,并把这个连接的socket句柄绑定到刚才创建的IOCP上 AConnect := accept( FListenSock, addr, len); CreateIoCompletionPort( AConnect, FCompletPort, nil, 0 ); //创建CPU数*2 + 2个线程 for i:=1 to si.dwNumberOfProcessors*2+2 do begin AThread := TRecvSendThread.Create( false ); AThread.CompletPort := FCompletPort;//告诉这个线程,你要去这个IOCP去访问数据 end; |
procedure TRecvSendThread.Execute; var ...... begin while (not self.Terminated) do begin //查询IOCP状态(数据读写操作是否完成) GetQueuedCompletionStatus( CompletPort, BytesTransd, CompletKey, POVERLAPPED(pPerIoDat), TIME_OUT ); if BytesTransd <> 0 then ....;//数据读写操作完成 //再投递一个读数据请求 WSARecv( CompletKey, @(pPerIoDat^.BufData), 1, BytesRecv, Flags, @(pPerIoDat^.Overlap), nil ); end; end; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者