摘要:
介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执 行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者 算法的运行时间。编译器和操作系统为我们提供了很多时间函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合适的时间函 数。现在我就介绍windows下的几种常用时间函数。1:Sleep函数使用:sleep(1000),在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟 阅读全文
posted @ 2013-08-11 21:58
╭爵☆爷╯
阅读(1420)
评论(0)
推荐(0)
摘要:
临界区,内核事件,互斥量,信号量,都能完成线程的同步,在这里把他们各自的函数调用,结构定义,以及适用情况做一个总结。临界区:适用范围:它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码快同步,效率比较高。相关结构:CRITICAL_SECTION _critical相关方法:/*初始化,最先调用的函数。没什么好说的,一般windows编程都有类似初始化的方法*/InitializeCriticalSection(&_critical)/*释放资源,确定不使用_critical时调用,一般在程序退出的时候调用。如果以后还要用_critical,则要重新调用Initi 阅读全文
posted @ 2013-08-11 21:56
╭爵☆爷╯
阅读(434)
评论(0)
推荐(0)
摘要:
Cache的原理、设计及实现前言 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、指令结构、信息在各个部件之间的传送速度及存储部件的存取速度等因素有关,特别是与CPU/内存之间的存取速度有关。 若CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力。 如500MHz的PⅢ,一次指令执行时间为2ns,与其相配的内存(SDRAM)存取时间为10ns,比前者慢5倍,CPU和PC的性能怎么发挥出来? 如何减少CPU与内存之间的速度差异?有4种办法: 一种是在基本总线周期中插入等待,但这样会浪费CPU的能力。 ... 阅读全文
posted @ 2013-08-11 21:53
╭爵☆爷╯
阅读(2257)
评论(0)
推荐(0)
摘要:
英文原文:The Principles of Good Programming 1. 避免重复原则(DRY - Don’t repeat yourself) 编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。 2. 抽象原则(Abstraction Principle) 与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。 3. 简单原则(Keep It Simple and Stupid) 简单是软件设计的目标,简单的代码占用时间少,漏洞少,并且易于修改。 4. 避免... 阅读全文
posted @ 2013-08-11 21:49
╭爵☆爷╯
阅读(386)
评论(0)
推荐(0)
摘要:
1. even每个字节传送整个过程中bit为1的个数是偶数个(校验位调整个数)2. odd每个字节穿送整个过程中bit为1的个数是奇数个(校验位调整个数)3. noparity没有校验位4. space校验位总为05. mark校验位总为1 阅读全文
posted @ 2013-08-11 21:47
╭爵☆爷╯
阅读(315)
评论(0)
推荐(0)
摘要:
校验和计算参考RFC文献1. 前言校验和计算是NAT功能和内容修改功能的基本功,这些操作进行后都需要修改数据头中的校验和。2. 16位校验和计算2.1 基本原理IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,采用的都是将数据流视为16位整数流进行重复叠加计算。为了计算检验和,首先把检验和字段置为0。然后,对有效数据范围内中每个16位进行二进制反码求和,结果存在检验和字段中,如果数据长度为奇数则补一字节0。当收到数据后,同样对有效数据范围中每个16位数进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么 阅读全文
posted @ 2013-08-11 21:45
╭爵☆爷╯
阅读(1076)
评论(0)
推荐(0)
摘要:
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2.如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinge 阅读全文
posted @ 2013-08-11 21:44
╭爵☆爷╯
阅读(200)
评论(0)
推荐(0)
摘要:
断言Andrei Alexandrescu本部分“泛型”讨论断言(assertions),一个你兵器库内非常强大的工具。以assert为基础,我们建立一个更强大的工具,帮助你建立更好的程序。我们很快就能看到,断言不仅是简单的工具/宏/函数。这是一种生活方式,一道深深的鸿沟把程序员们分成两类:了解,和不了解断言的力量。Assert(cool);那么,断言到底包含了什么?为什么你要重视断言?你什么时候需要用到断言,并且同样重要的,什么时候你不想要用到断言。我的看法是断言(例如用标准assert宏表示)是一个最最简单强大的工具来保证程序的正确性。断言的威力通常被低估了,至少在我参与的项目中是这样。可 阅读全文
posted @ 2013-08-11 21:42
╭爵☆爷╯
阅读(427)
评论(0)
推荐(0)
摘要:
在我们的开发测试阶段不可避免的要进行打印调试,在生成release的版时又需要去除打印信息,我们可以采用条件编译的方式解决这个问题,具体方法如下:#ifndef DEBUG_2012_06_06#define DEBUG_2012_06_06#endif#ifdef DEBUG_2012_06_06#define myPrint(str, ...) {\ printf(str, ##__VA_ARGS__);\}#else#define myPrint(str, ...)#endif这样我们在打印输出的地方使用我们自己的myPrint宏就像使用printf函数一样使用,在生成rele... 阅读全文
posted @ 2013-08-11 21:39
╭爵☆爷╯
阅读(331)
评论(0)
推荐(0)
摘要:
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value type. */typedef unsigned long int uint32; /* Unsigned 32 bit value */typedef uns 阅读全文
posted @ 2013-08-11 21:37
╭爵☆爷╯
阅读(315)
评论(0)
推荐(0)
摘要:
在C语言中,将某一位置0或置1,可以写成宏的形式,如下:#define SETBIT(x,y) (x |= (1>y) & 1) //获取X的第Y位的值 阅读全文
posted @ 2013-08-11 21:29
╭爵☆爷╯
阅读(131)
评论(0)
推荐(0)
摘要:
在我们的C语言程序中,经常用到布尔类型,但是C标准并不支持布尔类型,但我们可以自己实现其类型,实现代码如下:typedef enum{ false = 0, ture = !false}bool; 阅读全文
posted @ 2013-08-11 21:25
╭爵☆爷╯
阅读(997)
评论(5)
推荐(0)

浙公网安备 33010602011771号