DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一页 1 ··· 364 365 366 367 368 369 370 371 372 ··· 474 下一页

2014年2月17日

摘要: 这个问题看是很简单,但是在不同语言中实现的方式却千差万别,如果不知道方法,还真是麻烦,我就是在C#中遇到该问题,让我费了很大的周折,才在msdn查到。一、16进制字符串转数字 1、C/C++ I、最简单的办法:sscanf(“12AB”,,”%x”,&lngHex); //字符也可以为”0x12AB” II、有个朋友,自行编写函数实现了该功能,据说速度比sscanf快: BOOL HexToDec( LPCTSTR shex,int& idec ) { int i,mid; int len = lstrlen( shex ); if( len>8... 阅读全文
posted @ 2014-02-17 19:41 DoubleLi 阅读(8089) 评论(0) 推荐(0)

摘要: windows下此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因有两种方法可以检测:1.TCP连接双方定时发握手消息 2.利用TCP协议栈中的KeepAlive探测第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)Windows 2000平台下头文件#include //定义结构及宏struct TCP_KEEPALIVE {u_longonoff;u_longkeepalivetime;u_longkeepa 阅读全文
posted @ 2014-02-17 19:39 DoubleLi 阅读(840) 评论(0) 推荐(0)

摘要: for(;iter!=mapStudent.end();){ if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指向下面一个结点 mapStudent.erase(iter++); } else { //条件不满足,指向下面一个结点 iter++; }}这种删除方式也是STL源码一书中推荐的方式,分析 mapStudent.erase(iter++)语句,map中在删除iter的时候,先将iter做缓存,然后执行iter++使之指向下一个结点,再进入erase函数体中执行删除操作,删除时使用的iter就是缓存下来的iter(也就是当前iter(做了 阅读全文
posted @ 2014-02-17 14:30 DoubleLi 阅读(12439) 评论(0) 推荐(2)

摘要: memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。第二种情况下,问题出现在右边的两个字节,这两个字节 阅读全文
posted @ 2014-02-17 13:46 DoubleLi 阅读(560) 评论(0) 推荐(0)

2014年2月12日

摘要: 跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。 心跳包一般来说都是在逻辑层发送空的echo包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样... 阅读全文
posted @ 2014-02-12 09:12 DoubleLi 阅读(3050) 评论(0) 推荐(0)

2014年2月10日

摘要: 假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据。然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了。主要信息包含在位图信息头里面,数据则在位图数据缓冲里面。现在的问题是,在Windows下面如何将一张位图画出来,而且现在是如何从数据缓存里面绘画出位图。一般情况,我们都是直接绘制在dc里面,而不是绑定到子控件,让子控件自己绘画,比如picture控件之类的,我觉得提供绘制在dc里面的接口更具有广泛性。现在我知道两种从内存数据绘制彩色位图的2种方法。第一种麻烦一点,第二种则相当直接。方法一:第一步,用CreateCompatibleDC创建跟目标dc的兼 阅读全文
posted @ 2014-02-10 13:45 DoubleLi 阅读(8427) 评论(0) 推荐(0)

2014年2月8日

摘要: 正如大家所知道的那样,多核多cpu越来越普遍了,而且编写多线程程序也是件很简单的事情。在Windows下面,调用CreateThread函数一次就能够以你想要的函数地址新建一个子线程运行。然后,事情确实你发现创建多线程根本没有让程序快多少,也没有提高多少cpu利用率,甚至可能让cpu利用率下降。唯一能够确定的是多线程能够避免界面假死。为什么会是这样的了。本文将举一些例子和讲述一些原因。首先,我来讲一下多处理的一些知识。如下图所示,多处理器系统也只有一个待运行的线程队列,内存中也只有一个操作系统拷贝,而且也只有一个内存系统,但是会有多个cpu同时运行不同的线程。一个cpu运行一个线程,那么上图中 阅读全文
posted @ 2014-02-08 10:15 DoubleLi 阅读(33628) 评论(0) 推荐(4)

2014年1月21日

摘要: VS2005调试技巧集合http://blog.csdn.net/rainylin/archive/2007/09/06/1775125.aspx下面有从浅入深的6个问题,您可以尝试回答一下一个如下的语句for (int i = 0; i 0且f(x2)0,则函数的根就在区间x3和x2之间,如果f(x3)0;如果你把main函数里所有的操作都注释掉,那么 程序什么都不做,就不可能有bug,那就好比是f(x2)不可省略): >Debug.Print a + bMSDN参考:ms-help://MS.MSDNQTR.v90.en/dv_vscmds/html/48711628-1909-47 阅读全文
posted @ 2014-01-21 10:19 DoubleLi 阅读(2071) 评论(0) 推荐(1)

2014年1月16日

摘要: 由于看了一下,比较好理解,暂时先放到这里,待有空再翻译。只是在每节后大致介绍一下讲的内容。感觉写的比较全,无论从消息的原理还是从MFC操作上来说,值得一看,我也在此做个收藏。(一)说明:以下首先对消息进行介绍,然后在消息处理中,使用类向导创建消息循环,这个操作是在vc6.0(或者之下版本)操作的。IntroductionPerhaps one of the most important means of communication in windows is Messages. The traditional program starts at yourmain()function, move 阅读全文
posted @ 2014-01-16 19:45 DoubleLi 阅读(3837) 评论(2) 推荐(0)

2014年1月9日

摘要: 关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇《高质量C++/C编程指南》的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章。常见的给对象赋值方式有构造函数,拷贝构造函数,赋值运算符这三种方法,如下代码演示了这几种常见的方法。Aa1;Aa2(a1);Aa3 = a1;a3 = a2;如果不手动写代码,C++编译器默认提供了构造函数,拷贝构造函数,赋值运算符的这三种方法的默认实现。默认构造函数没有参数,它什么也不做,程序员如果要实现手动构造的话则需要编写相应的重载版本。前面代码的第一行就是通过默认构造函数来创建一个对象,一般也不会和其它几种构造方式混 阅读全文
posted @ 2014-01-09 10:13 DoubleLi 阅读(707) 评论(0) 推荐(0)

上一页 1 ··· 364 365 366 367 368 369 370 371 372 ··· 474 下一页