IOCP的一些笔记
来源:互联网 发布:数据安全法规 编辑:程序博客网 时间:2024/05/22 02:30
本文只是记录下笔记,主要是参考资料的一些点,辅助个人理解,对其他人多半无用
OVERLAPPED(重叠结构)
CompletionPort(完成端口):暂时只用把它大体理解为一个容纳网络通信操作的队列完成端口中
1.重叠结构要用几个
2.绑定完成端口的时候传入单句柄参数,即_PER_SOCKET_CONTEXT
if( NULL== CreateIoCompletionPort( (HANDLE)m_pListenContext->m_Socket, m_hIOCompletionPort,(DWORD)m_pListenContext, 0))
3._PER_IO_CONTEXT和OVERLAPPED关联:在投递请求时会新创建一个_PER_IO_CONTEXT,里面包含OVERLAPPED结构,会用到里面的缓存区和OVERLAPPED
1>if(FALSE == m_lpfnAcceptEx( m_pListenContext->m_Socket, pAcceptIoContext->m_sockAccept, p_wbuf->buf, p_wbuf->len - ((sizeof(SOCKADDR_IN)+16)*2),
sizeof(SOCKADDR_IN)+16, sizeof(SOCKADDR_IN)+16, &dwBytes, p_ol))
2>WSARecv( pIoContext->m_sockAccept, p_wbuf, 1, &dwBytes, &dwFlags, p_ol, NULL );
4. BOOL WINAPI GetQueuedCompletionStatus(
__in HANDLE CompletionPort, // 这个就是我们建立的那个唯一的完成端口
__out LPDWORD lpNumberOfBytes, //这个是操作完成后返回的字节数
__out PULONG_PTR lpCompletionKey, // 这个是我们建立完成端口的时候绑定的那个自定义结构体参数
__out LPOVERLAPPED *lpOverlapped, // 这个是我们在连入Socket的时候一起建立的那个重叠结构
__in DWORD dwMilliseconds // 等待完成端口的超时时间,如果线程不需要做其他的事情,那就INFINITE就行了
);
1>lpComletionKey获得绑定完成端口的_PER_SOCKET_CONTEXT
2>通过lpOverlapped获得相应的_PER_IO_CONTEXT
5.PostQueuedCompletionStatus()
如果在线程睡眠的时候,简单粗暴的就把线程关闭掉的话,那是会一个很可怕的事情,因为很多线程体内很多资源都来不及释放掉
参考资料:
http://blog.csdn.net/piggyxp/article/details/6922277
http://www.cnblogs.com/Hybird3D/archive/2012/02/02/2335000.html
http://www.cnblogs.com/Hybird3D/archive/2012/02/04/2337652.html
0 0
- IOCP的一些笔记
- iocp 的一些分析
- IOCP的一些总结
- IOCP的一些心得
- IOCP相关的一些总结
- IOCP相关的一些总结
- iocp的一些有用资料
- 一些关于IOCP的理解
- IOCP相关的一些总结
- IOCP的笔记及理解
- 我的IOCP学习笔记
- 使用IOCP需要注意的一些问题
- 学习笔记:神秘的 IOCP 完成端口
- 我的IOCP学习笔记 - 运行展示
- 学习笔记:神秘的 IOCP 完成端口
- 学习笔记:神秘的 IOCP 完成端口
- IOCP一些学习
- 关于Socket和IOCP的一些值得注意的地方
- Mantle与Direct3D游戏效能大比拼
- Spring学习笔记之最小化xml配置
- sscanf进行字符串分离、提取。以及string与数值的相互转换
- Objective C 中的nil,Nil,NULL和NSNull理解
- PostgreSQL系统相关查询[1]
- IOCP的一些笔记
- du
- apt-get apt-cache
- vim的全选功能,删除
- 大型网站的浏览器缓存设置
- android中的Context类详解
- IOS开发中(null)与<null>的处理
- Creating Custom Views -
- GitHub版本库使用详细教程(命令行及图形界面版)