摘要: 在TCP网络通信中,经常会出现客户端和服务器之间的非正常断开,需要实时检测查询链接状态。常用的解决方法就是在程序中加入心跳机制。从网络上找到,主要有以下方法实现TCP异常断开的检测:SO_KEEPALIVE,SIO_KEEPALIVE_VALS 和Heart-Beat线程。(1)SO_KEEPALIVE 机制这是socket库提供的功能,设置接口是setsockopt API:BOOL bSet=TRUE;setsockopt(hSocket,SOL_SOCKET,SO_KEEPALIVE,(constchar*)&bSet,sizeof(BOOL));根据MSDN的文档,如果为soc 阅读全文
posted @ 2013-12-29 15:49 将夜 阅读(2200) 评论(0) 推荐(0) 编辑
摘要: int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n 的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)复制代码代码如下:#include #include int main(){ char str[10]={0,}; snprintf(str, sizeof(str), "0123456789012345678");/ 阅读全文
posted @ 2013-12-29 15:41 将夜 阅读(3520) 评论(0) 推荐(0) 编辑
摘要: C中volatile关键字在程序操作变量时,强制读写变量所在内存,以阻止编译器对某些特殊变量的错误优化。反过来,只有靠程序员用volatile过滤一些特殊情况后,编译器才能大胆优化。volatile作用可总结为:阻止三种情形下的两种编译器优化。两种编译器优化 a.数据流分析优化:编译器分析程序中变量在哪里赋值、哪里使用、哪里失效,根据分析结果消除多余的变量读取和赋值步骤,如: int a = 10; ......//其他代码,里面没有对a的读操作 a = 20; 开启了优化选项的编译器能够根据a赋值和使用情况,推断a=10无效,直接忽略这条语句。 b.寄存器缓存技术:把频繁访问的变量缓存到某. 阅读全文
posted @ 2013-12-29 15:34 将夜 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 关于适配器的解释,简单的讲就是把要显示给用户的数据信息通过适当的模式动态的填充各种ListView,也可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,界面是有一定规律的View。由于一些特殊的需要,往往需要自己定义适配器来完成显示功能,下面就以较为常用的适配器简介其用法:1、首先要定义一个用于显示ListView的布局文件main.xml,如下[html]view plaincopyprint?2、再定义一个ListView中要显示的内容的布局文件item.xml,如下[html]view plaincopyprint?3、自定义一个适配器,使数据充填到对应的Vie 阅读全文
posted @ 2013-12-28 17:25 将夜 阅读(813) 评论(0) 推荐(0) 编辑
摘要: 1、自动增长identity适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用)数据库中的语法如下:MySQL:create table t_user(id int auto_increment primary key, name varchar(20));SQL Server:create table t_user(id int 阅读全文
posted @ 2013-12-28 17:22 将夜 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。下面开始正文。【案例1】通过一个对象获得完整的包名和类名?123456789101112131415packageReflect;/*** 通过一个对象获得完整的包名和类名* */classDemo{//other codes...}classhello{publicstaticvoidmain(String[] args) {Demo demo=newDemo();System.out.println(demo.getClass(). 阅读全文
posted @ 2013-12-28 17:21 将夜 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:[cpp]view plaincopyclassA{public:virtualvoidf();virtualvoidg();private:inta};classB:publicA{public:voidg();private:intb;};//A,B的实现省略因为A有virtual void f(),和g(),所以编译器为A类准备了一个虚表vtableA,内容如下:A::f 的地址A::g 的地址B 阅读全文
posted @ 2013-12-27 15:13 将夜 阅读(1154) 评论(0) 推荐(0) 编辑
摘要: 从没想过有人会把这两个毫不相关的概念混为一谈,可招聘时还真就碰到问内联答内嵌的情况。上网一查,原来内嵌汇编也常被叫内联汇编,中文表述IT名词时真就这么乏力么?蹩脚的撞名一个接一个。 内联函数即inline函数,其作用是“建议”编译器展开函数,不是一定展开,除非设置强制内联(如gcc的__attribute__((always_inline)))。展开即把函数代码插入被调用位置,可以节省函数调用的进出栈开销,但会增加代码量。所以一般短小函数适合内联展开,而大函数展开会大大增加指令内存,还可能影响指令cache命中率,得不偿失。 除inline外static也有类似作用:编译器会倾向于展开sta. 阅读全文
posted @ 2013-12-27 15:12 将夜 阅读(350) 评论(0) 推荐(0) 编辑
摘要: int access(const char *filename, int amode);amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。这个函数还可以检查其它文件属性:06 检查读写权限04 检查读权限02 检查写权限01 检查执行权限00 检查文件的存在性 阅读全文
posted @ 2013-12-27 15:09 将夜 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 一、分析Java异常处理机制确实比较慢,这个“比较慢”是相对于诸如String、Integer等对象来说,单单从对象的创建上来说,new一个IOException会比String慢5倍,这从异常的处理机制上也可以解释:因为它执行fillStackTrace方法,要记录当前栈的快照,而String类则是直接申请创建一个内存创建对象,异常类慢一筹也在所难免。 二、场景我们知道异常是主逻辑的例外逻辑,举个例子来说,比如我们能在马路上走(这时主逻辑),突然开过一辆车,我要避让(这是受检异常,必须处理),继续走着,不然一架飞机从我头顶飞过(非受检异常),我们可以选择继续行走(不捕捉),也可以选择指责噪音 阅读全文
posted @ 2013-09-28 10:49 将夜 阅读(312) 评论(0) 推荐(1) 编辑