2014 08 26

来源:互联网 发布:网络舆情监控资质 编辑:程序博客网 时间:2024/06/14 22:28






添加资料1:例如#if OS_CRITICAL_METHOD == 3                                   
    OS_CPU_SR  cpu_sr; 
    #endif  
c语言里所有以#开头的都是预编译指令,就是在正式编译之前,让编译器做一些预处理的工作。
#if和#endif是配对的,叫做条件编译指令,如果满足#if后面的条件,就编译#if和#endif之间的程序段,否则不编译。比如这段程序,如果常量OS_CRITICAL_METHOD的值为3就编译下面的一条语句。
那和if (OS_CRITICAL_METHOD == 3 ) OS_CPU_SR cpu_sr; 的区别是什么呢?得到的结果一样吗
答:得到的结果是相同的。但如果OS_CRITICAL_METHOD == !3,这样就不用编译下面的指令。即非编译部分不会存在于最后的程序或库里面,而if条件的所有不同代码块无论执行与否都会存在于代码里面。这样一是节约了存储空间,另外还节约了CPU的运行时间。


添加资料2:static作用于函数
  使用static用于函数定义时,对函数的连接方式产生影响,使得函数只在本文件内部有效,对其他文件是不可见的。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。
  
  如果想要其他文件可以引用本地函数,则要在函数定义时使用关键字extern,表示该函数是外部函数,可供其他文件调用。另外在要引用别的文件中定义的外部函数的文件中,使用extern声明要用的外部函数即可。


添加资料3:>set_tcp_keepalive
在一个正常的TCP连接上,当我们用无限等待的方式调用下面的recv或send的时候:
    ret=recv(s,&buf[idx],nLeft,flags);或
    ret=send(s,&buf[idx],nLeft,flags);
如果TCP连接被对方正常关闭,也就是说,对方是正确地调用了closesocket(s)或者shutdown(s)的话,那么上面的recv或send调用就能马上返回,并且报错。这是由于closesocket()或者shutdown()有个正常的关闭过程,会告诉对方“TCP连接已经关闭,你不需要再发送或者接受消息了”。但是,如果是网线突然被拔掉,TCP连接的任何一端的机器突然断电或重启动,那么这时候正在执行recv或send操作的一方就会因为没有任何连接中断的通知而一直等待下去,也就是会被长时间卡住。这种情形解决的办法是启动TCP编程里的keepAlive机制。
    此处的keepalivetime表示的是TCP连接处于畅通时候的探测频率,一旦探测包没有返回,就以keepaliveinterval的频率发送,经过若干次的重试,如果探测包都没有返回,那么就得出结论:TCP连接已经断开,于是上面的recv或send调用也就能马上返回,不会无限制地卡住了。
0 0
原创粉丝点击