- 博客(10)
- 资源 (2)
- 收藏
- 关注
原创 最快速度找到内存泄漏
<br />内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。<br /> <br /> <br /> <br />这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。<br /> <br /> <br /> <br /> <br />确认是否存在内存泄漏<br />我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:<br />cl
2011-02-22 16:47:00 610
原创 重叠IO模型(之二)
<br />三、编程步骤<br />1、创建一个套接字,开始在指定的端口上监听连接请求。<br />2、接收一个入站的连接请求。<br />3、为接受的套接字创建新的WSAOVERLAPPED结构,并分配事件对象句柄。<br />4、以WSAOVERLAPPED结构为参数,在套接字上投递WSARecv调用。<br />5、将所有接受套接字的事件组建事件数组,并调用WSAWaitForMultipleEvents函数,等待与重叠调用关联在一起的事件受信。<br />6、使用WSAGetOverlappedRe
2011-02-14 17:42:00 2045
原创 重叠IO之事件通知模型
<br />/**********************************************************************<br />* Author: JMF<br />* Version:1.0<br />* BUG: 最大只允许同时64个客户端同时连接(WSA_MAXIMUM_WAIT_EVENTS)<br />***********************************************************************/<b
2011-02-14 17:19:00 1067
原创 谈谈RTP传输中的负载类型和时间戳
<br />最近被RTP的负载类型和时间戳搞郁闷了,一个问题调试了近一周,终于圆满解决,回头看看,发现其实主要原因还是自己没有真正地搞清楚RTP协议中负载类型和时间戳的含义。虽然做RTP传输,有着Jrtplib和Ortp这两个强大的库支持,一个是c++接口,一个是c语言接口,各有各的特点,各有各的应用环境,但是仅仅有库就能解决一切问题吗?可能仿照着一些例子程序,你能够完成主要的功能,但一旦问题发生了,不清楚原理你是很难定位和解决问题的,所以在此,用我的经验劝劝大家,磨刀不误砍柴工,做应用还是先把原理搞清楚再
2011-02-14 10:50:00 1016
原创 WSAAsynSelect()模型 FD_READ事件中recv()接收数据的返回值讨论
<br />使用WSAAsynSelect()模型,在FD_READ事件的时候recv()的返回值讨论? <br /><br />C/C++ codedo{ int nRecvStat = recv( m_sockID, pchBuf, nBufLen, 0 ); int nErrorCode = ::WSAGetLastError();}while(nRecvStat > 0); <br />nRecvStat > 0 自然就是实际从SOCKET缓冲区中读出的数据,现在我们讨论nRecvSta
2011-02-12 16:43:00 3120
原创 FD_WRITE 消息机制
<br />我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多的时间来说明更复杂的 FD_WRITE , FD_READ 事件非常容易掌握. 当有数据发送过来时, WinSock 会以 FD_READ 事件通知你, 对于每一个 FD_READ 事件, 你需要像下面这样调用 recv() :<br /><br />int bytes_recv = recv(wParam, &data, sizeof(data), 0);<br /><br /><br /><br />基
2011-02-12 16:38:00 639
原创 网络编程记录
我是从来不用心跳,影响效率,起一个线程去select就行了C/C++ code int select( __in int nfds, __in_out fd_set* readfds, __in_out fd_set* writefds, __in_out fd_set* exceptfds, __in conststruct timeval* timeout);第4个参数exceptfds中就是所有
2011-02-12 10:44:00 861
原创 select+NONBLOCK
补充一点:只有在使用epoll ET(Edge Trigger)模式的时候,才需要关注数据是否读取完毕了。使用select或者epoll的LT模式,其实根本不用关注数据是否读完了,select/epoll检测到有数据可读去读就OK了。<br /> <br />这里有两种做法:<br /> 1. 针对TCP,调用recv方法,根据recv方法的返回值,如果返回值小于我们指定的recv buffer的大小,则认为数据已经全部接收完成。在Linux epoll的manual中,也有类似的描述:<br /> For
2011-02-12 10:43:00 5830
原创 select+NONBLOCK
补充一点:只有在使用epoll ET(Edge Trigger)模式的时候,才需要关注数据是否读取完毕了。使用select或者epoll的LT模式,其实根本不用关注数据是否读完了,select/epoll检测到有数据可读去读就OK了。<br /> <br />这里有两种做法:<br /> 1. 针对TCP,调用recv方法,根据recv方法的返回值,如果返回值小于我们指定的recv buffer的大小,则认为数据已经全部接收完成。在Linux epoll的manual中,也有类似的描述:<br /> For
2011-02-12 10:43:00 1633
c++标准库——boost程序库导论.chm
2009-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人