自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

转载 线程池的介绍及简单实现

线程池的介绍及简单实现     选择自 IOKE 的 Blog 关键字  线程池的介绍及简单实现出处     服务器程序利用线程技术响应客户请求已经司空见惯,可能您认为这样做效率已经很高,但您有没有想过优化一下使用线程的方法。该文章将向您介绍服务器程序如何利用线程池来优化性能并提供一个简单的线程池实

2010-03-19 16:47:00 580

转载 一个TCP包中的数据数据问题

一个TCP包中最大的数据2008-03-10 18:54在以太网中,最大传输单元MTU为1500个字节,在一个IP包中,去除IP包头的20个字节,可以传输的最大数据长度为1480个字节。在TCP包中,去除20个TCP包头,可以传输的最大数据段为1460个字节。因此,当数据超过最大数据长度时,将对该数据进行分片处理,在IP包头中会看到有多个片在传输,但标识号是相同的,表示

2010-03-12 10:04:00 4107

转载 网络缓存大小引发的问题

cp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下,send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数

2010-03-08 19:45:00 4875

转载 一个很有用的异步I/O套接字模型例子

对于一个windows网络编程初学者,下面方法是经典入门。    初学者建议不要用MFC提供的类,而用windows API做一个简单服务器和客户端,这样有助于对socket编程机制的理解。    为了简单起见,应用程序是基于MFC的标准对话框。    Winsock用WINDOWS API实现:   (1)服务器端有两个线程:    主线程 — 你需要编写以下函数来实现    #define N

2010-01-30 10:56:00 1237

转载 CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别

CreateThread是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要轻易。在使用的过程中要考虑到进程的同步与互斥的关系(防止死锁)。线程函数定义为:DWORD WINAPI _yourThreadFun(LPVOID pP

2010-01-22 17:24:00 467

原创 static作用域小问题和解决方案

这是一个作用域的问题! 成员函数的作用域是类域, 而在类体外加上static不是表示静态函数,表示的是函数拥有文件域(file scope) 而类域是小于文件域,强行把类域扩大到文件域,就会出错。 如下代码: class CA { public: static void display(void); }; static void CA::display(void) { // ERROR! co

2010-01-14 15:58:00 852 1

转载 类封装线程(动态线程)

error C2664: CreateThread : cannot convert parameter 3 from unsigned long (void *) to unsigned long (__stdcall *)(void *) 开发平台:VC6.0错误原因:类成员函数作为线程函数时,必须是静态成员函数。      解决办法:static DWORD WINA

2010-01-14 14:26:00 1179

转载 深入GetMessage和PeekMessage

深入GetMessage和PeekMessage  Bob GundersonMSDN技术组作于:1992年11月11日 Creamdog译于:2002年3月13日 译者的话该文重点讲述了Windows处理事件、消息的具体过程和步骤。尤其是在系系处理鼠标键盘事件的过程上做了详解。通过这篇文章,你将对Windows的消息处理机制有一个较全面的了解。概念

2010-01-06 19:18:00 1140

转载 CAsyncSocket及CSocket

MFC疑难注解:CAsyncSocket及CSocket2009-12-21 20:23MFC疑难注解:CAsyncSocket及CSocketMFC对SOCKET编程的支持其实是很充分的,然而其文档是语焉不详的。以至于大多数用VC编写的功能稍复杂的网络程序,还是使用API的。故CAsyncSocket及CSocket事实上成为疑难,群众多敬而远之。余好事者也,不忍

2010-01-05 19:42:00 2662

转载 MFC和Win32

MFC和Win32   MFC Object和Windows Object的关系 MFC中最重要的封装是对Win32 API的封装,因此,理解Windows Object和MFC Object (C++对象,一个C++类的实例)之间的关系是理解MFC的关键之一。所谓Windows Object(Windows对象)是Win32下用句柄表示的Windows操作系统对象

2009-12-15 21:36:00 798

转载 多路复用I/O模型支持多Client

多路复用I/O模型支持多Client的实现及效率讨论  发表日期:2004-04-28作者:(CSDN)HuangRG[] 出处:   在头文件中包含了“winsock.h”和"#pragma   comment(lib,"wsock32")"1.    引言  多路复用I/O模型(select)是UNIX/L

2009-12-13 20:03:00 765

转载 输入阻抗和输出阻抗小结(转)

  一、输入阻抗输入阻抗是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。输入阻抗跟一个普通的电抗元件没什么两样,它反映了对电流阻碍作用的大小。对于电压驱动的电路,输入阻抗越大,则对电压源的负载就越轻,因而就越容易驱动,也不会对信号源有影响;而对于电流驱动型的电路,输入阻抗越小

2009-12-03 11:16:00 2209

原创 数组与指针内存比较注意

 数组char *a[]=“hello”; 指针char *p=“hi”; a是整个char的首地址,是个常量!对a的赋值是错的!只可以对其内容进行改变!且sizeof(a)=6;a大小固定为6,不可再改变了!注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。不论数组 a 的容量是多少,sizeof(a)始终等于 sizeof(char *)。其实质是v

2009-11-28 15:56:00 553

原创 assert()宏的使用!

 使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。  在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:  #include   #define NDEBUG  #include  编程新手常犯这种错误,他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检

2009-11-28 15:18:00 618

原创 extern "C" __stdcall对函数的使用声明

extern "C"     __stdcall对函数的使用声明如下: 1    extern "C":  在当调用别人写的库时,注意库是使用何种编译器,若是C的,则你在用VC中的C++编译器调用时就得加   #if defined(__cplusplus)   extern "C" {#endif  ..........声明被调用的函数名  #

2009-11-28 11:01:00 3907

转载 探索C++的秘密之详解extern "C"

 1楼时常在cpp的代码之中看到这样的代码:  #ifdef __cplusplus  extern "C" {  #endif  //一段代码  #ifdef __cplusplus  }  #endif    这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加

2009-11-28 10:36:00 580

转载 浮点数的比较

 浮点数的比较           在数学运算当中经常会涉及到判断两个数是否相等的情况     对于整数很好处理       A==B这样的一个语句就可以解决全部的问题     但是对于浮点数是不同的         首先,浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确的表达的     现在的计算机大部分都是数字计算机,不是模拟机,数字机的离散化的数据表示方法自然无法精确表达大

2009-11-27 22:16:00 445

原创 响应改变Slider

Slider 没有自己的change 响应函数,需要在主窗口中添加:1:如果你的slider创建的时候是竖直的 ,让父窗口响应WM_VSCROLLvoid CAcq_FtpDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code her

2009-11-25 22:36:00 683

转载 c#类和结构体的关系

 类:类是 C# 中功能最为强大的数据类型,类也定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。结构体:结构体是轻量型的类,使用开销相对于类较小。两者的关系:1.数据类型:类和结构体都是数据类型,类是引用类型,结构体是值类型。2.继承性:类可以继承和被继承,而结构体隐式继承于object,不可以继承(除接口以外)和被继承3.构造函数:类和结构体都有默认(无参)构造函数,只不过

2009-11-24 20:14:00 564

转载 VC两种socket类比较

 一、实现方法  微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。CAsyncSocket类逐个封装了WinSock API,为高级网络程序员提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。为了给程序员提供更方便的接口以自

2009-11-24 19:22:00 4269 1

高质量C++编程指南

个人感觉是很好的编程资料!相信你看了后也会有很大的收获!不但讲了我们编程人员应该有的基本素质,也有很多深入提高的部分,如动态内存,指针,重载等大家易出错的地方! 好的话大家给顶下! 版 本 历 史 版本/状态 作者 参与者 起止日期 备注 V 0.9 草稿文件 林锐 2001-7-1 至 2001-7-18 林锐起草 V 1.0 正式文件 林锐 2001-7-18 至 2001-7-24 朱洪海审查 V 0.9, 林锐修正草稿中的错误 本书第一章至第六章主要论述 C++/C 编程风格。难度不高,但是细节比较多。别小 看了,提高质量就是要从这些点点滴滴做起。世上不存在最好的编程风格,一切因需求 而定。团队开发讲究风格一致,如果制定了大家认可的编程风格,那么所有组员都要遵 守。如果读者觉得本书的编程风格比较合你的工作,那么就采用它,不要只看不做。人 在小时候说话发音不准,写字潦草,如果不改正,总有后悔的时候。编程也是同样道理。 第七章至第十一章是专题论述,技术难度比较高,看书时要积极思考。特别是第七 章“内存管理” ,读了并不表示懂了,懂了并不表示就能正确使用。有一位同事看了第 七章后觉得“野指针”写得不错,与我切磋了一把。可是过了两周,他告诉我,他忙了 两天追查出一个 Bug,想不到又是“野指针”出问题,只好重读第七章。 光看本书对提高编程质量是有限的,建议大家阅读本书的参考文献,那些都是经典 名著。 选了其中的普通的一个例子: 二、以下为 Windows NT 下的 32 位 C++程序,请计算 sizeof 的值(10 分 void Func ( char str[100]) { 请计算 sizeof( str ) = } char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = sizeof ( p ) = sizeof ( n ) = void *p = malloc( 100 ); 请计算 sizeof ( p ) = 四、有关内存的思考题(20 分) void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } 请问运行 Test 函数会有什么样的结果? 答: char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行 Test 函数会有什么样的结果? 答: Void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); } 请问运行 Test 函数会有什么样的结果? 答: void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } } 请问运行 Test 函数会有什么样的

2009-11-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除