<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[王孙贵族的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wangyadong</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangyadong]]></copyright><item><title><![CDATA[结构体对齐的具体含义（#pragma pack）]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4730037</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4730037</guid><author>wangyadong</author><pubDate>Mon, 26 Oct 2009 17:05:00 +0800</pubDate><description><![CDATA[结构体对齐的具体含义（#pragma pack）朋友帖了如下一段代码：　　#pragma pack(4)　　class TestB　　{　　public:　　　　int aa;　　　　char a;　　　　short b;　　　　char c;　　};　　int nSize = sizeof(TestB);　　这里nSize结果为12，在预料之中。　　现在去掉第一个成员变量为如]]></description><category></category></item><item><title><![CDATA[C++的成员函数作为回调函数]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4456164</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4456164</guid><author>wangyadong</author><pubDate>Mon, 17 Aug 2009 17:16:00 +0800</pubDate><description><![CDATA[如果试图直接使用C++的成员函数作为回调函数将发生错误，甚至编译就不能通过。通过查询资料发现，其错误是普通的C++成员函数都隐含了一个传递函数作为参数，亦即“this”指针，C++通过传递一个指向自身的指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数但是确有不同的数据成员。由于this指针的作用，使得将一个CALLBACK型的成员函数作]]></description><category></category></item><item><title><![CDATA[stl中相等和等价的区别]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4407218</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4407218</guid><author>wangyadong</author><pubDate>Tue, 04 Aug 2009 13:49:00 +0800</pubDate><description><![CDATA[ STL充满了比较对象是否有同样的值。比如，当你用find来定位区间中第一个有特定值的对象的位置，find必须可以比较两个对象，看看一个的值是否与另一个相等。同样，当你尝试向set中插入一个新元素时，set::insert必须可以判断那个元素的值是否已经在set中了。find算法和set的insert成员函数是很多必须判断两个值是否相同的函数的代表。但它们以不同的方式完成，find对“相同]]></description><category></category></item><item><title><![CDATA[归纳]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4399653</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4399653</guid><author>wangyadong</author><pubDate>Sat, 01 Aug 2009 13:36:00 +0800</pubDate><description><![CDATA[1 调用sleep函数，可以使线程自愿放弃他剩余的时间片2 可以将0传递给sleep，这样告诉系统，调用线程将放弃剩余的时间片，并迫使系统调用另一个线程。 3 getmessage是阻塞模式的，peekmessage是非阻塞模式的，立即返回。 4 使用getHostName方式获取的ip地址为空:解决方法：//获取本机IP CString GetLocalIP() { CS]]></description><category></category></item><item><title><![CDATA[closehandle]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4394310</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4394310</guid><author>wangyadong</author><pubDate>Thu, 30 Jul 2009 15:51:00 +0800</pubDate><description><![CDATA[CloseHandle()函数的使用？？很多程序在创建线程都这样写的：............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗？线程怎么运行呢？================================================Clos]]></description><category></category></item><item><title><![CDATA[_beginthread还是CreateThread ]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4393898</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4393898</guid><author>wangyadong</author><pubDate>Thu, 30 Jul 2009 14:17:00 +0800</pubDate><description><![CDATA[原帖地址http://blog.vckbase.com/flowsand/articles/3549.html 程序员对于Windows程序中应该用_beginthread还是CreateThread来创建线程，一直有所争论。本文将从对CRT源代码出发探讨这个问题。 I. 起因今天一个朋友问我程序中究竟应该使用_beginthread还是CreateThread，并且告诉我如果使用]]></description><category></category></item><item><title><![CDATA[WaitForSingleObject 的讨论]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4387266</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4387266</guid><author>wangyadong</author><pubDate>Tue, 28 Jul 2009 15:27:00 +0800</pubDate><description><![CDATA[问: 众所周知，在用户模式下等待某一个线程或其他事情的发生是要浪费CPU时间的，但若在内核模式下，比如WaitForSingleObject就不会占用CPU时间（除了两种模式之间的切换时间），那么系统是如何做到的呢，难道她就不需不断检测相应的内核对象吗？若是，那内核对象的结构是什么样的？ =================================================== 答: ]]></description><category></category></item><item><title><![CDATA[的 ]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4347219</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4347219</guid><author>wangyadong</author><pubDate>Tue, 14 Jul 2009 13:20:00 +0800</pubDate><description><![CDATA[对于基本数据类型，函数的参数前面加不加const都是一样的，但对于指针和引用，参数前面加const与不加const是不同类型的参数，因此是重载函数。  如下代码编译器认为是重复定义int comp(int a){	return a;}int comp(const int a){	return a;} 以下代码编译器会顺利编译通过int com]]></description><category></category></item><item><title><![CDATA[socket编程]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4339433</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4339433</guid><author>wangyadong</author><pubDate>Sat, 11 Jul 2009 09:41:00 +0800</pubDate><description><![CDATA[  Socket是应用层与TCP/IP协议族通信的中间软件抽象层，它是一组接口。在设计模式中，Socket其实就是一个门面模式，它把复杂的TCP/IP协议族隐藏在Socket接口后面，对用户来说，一组简单的接口就是全部，让Socket去组织数据，以符合指定的协议。先从服务器端说起。服务器端先初始化Socket，然后与端口绑定(bind)，对端口进行监听(listen)，调用accept阻塞]]></description><category></category></item><item><title><![CDATA[关于回调函数]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4327583</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4327583</guid><author>wangyadong</author><pubDate>Tue, 07 Jul 2009 11:43:00 +0800</pubDate><description><![CDATA[“先泛后精，先浅后深”的道理可是知易行难，所以常常会给技术上的小细节纠缠着，搞得晕晕乎，其中“回调函数”就是其中之一了，虽然回用，但是老是不明白其中的含义，众多的书本也说得隐晦不清。直到不久前看到一篇文章才总算比较清晰了解，。       概括起来，回调机制包括两部分：服务执行者和服务方式制定者。             1. 服务执行者先制定服务规范；            ]]></description><category></category></item><item><title><![CDATA[关于多线程]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4325641</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4325641</guid><author>wangyadong</author><pubDate>Mon, 06 Jul 2009 16:24:00 +0800</pubDate><description><![CDATA[1  进程是不活泼的。进程从来不执行任何东西，它只是线程的容器。线程总是在某个进程环境中创建的，而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码，并且在进程的地址空间中对数据进行操作。因此，如果在单进程环境中，你有两个或多个线程正在运行，那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码，对相同的数据进行操作。这些线程还能共享内核对象句柄，因为句柄表依赖于]]></description><category></category></item><item><title><![CDATA[extern c]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4295182</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4295182</guid><author>wangyadong</author><pubDate>Wed, 24 Jun 2009 17:06:00 +0800</pubDate><description><![CDATA[extern "C"的用法解析 http://blog.sina.com.cn/u/494a1ebc010004g5 C++中extern “C”含义深层探索                                     1.引言　　C++语言的创建初衷是“a better C”，但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C]]></description><category></category></item><item><title><![CDATA[关于c c++ .h .cpp .c]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4293486</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4293486</guid><author>wangyadong</author><pubDate>Wed, 24 Jun 2009 10:02:00 +0800</pubDate><description><![CDATA[基础：  一个.cpp对应一个obj,一个.obj就是一个编译单元，多个编译单元在链接的时候通过链接器链接，组成一个exe，就是一个程序。如果一个cpp需要另外一个cpp定义的函数，只需要在这个cpp中写上这个函数的声明就可以了，注意在链接的过程中如果有同名的函数或者变量在不同的obj中，程序运行会报错。（实际上在编译的时候，就会提示出现重定义的错误。）在实际的调试过程中发现，变量的重定义在编]]></description><category></category></item><item><title><![CDATA[【转】MFC中OnDraw与OnPaint的区别]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4250614</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4250614</guid><author>wangyadong</author><pubDate>Mon, 08 Jun 2009 09:44:00 +0800</pubDate><description><![CDATA[MFC中OnDraw与OnPaint的区别 OnPaint是WM_PAINT消息的消息处理函数，在OnPaint中调用OnDraw，一般来说，用户自己的绘图代码应放在OnDraw中。 OnPaint()是CWnd的类成员，负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数，没有响应消息的功能.当视图变得无效时（包括大小的改变，移动，被遮盖等等），Windows发送WM_PAINT]]></description><category></category></item><item><title><![CDATA[关于类中的static变量]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4247314</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4247314</guid><author>wangyadong</author><pubDate>Sat, 06 Jun 2009 14:45:00 +0800</pubDate><description><![CDATA[#include #include using namespace std;class testClass {  public:    static int x;    testClass(){        x = 5;    }    static int returnX(){        return x;    }    static vo]]></description><category></category></item><item><title><![CDATA[数据存储大小端模式]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4241279</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4241279</guid><author>wangyadong</author><pubDate>Thu, 04 Jun 2009 10:32:00 +0800</pubDate><description><![CDATA[所谓的大端模式，是指数据的低位（就是权值较小的后面那几位）保存在内存的高地址中，而数据的高位，保存在内存的低地址中，这样的存储模式有点儿类似于把数据当作字符串顺序处理：地址由小向大增加，而数据从高位往低位放； 所谓的小端模式，是指数据的低位保存在内存的低地址中，而数 据的高位保存在内存的高地址中，这种存储模式将地址的高低和数据位权有效地结合起来，高地址部分权值高，低地址部分权值低，和我们的逻辑]]></description><category></category></item><item><title><![CDATA[数组运算]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4241238</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4241238</guid><author>wangyadong</author><pubDate>Thu, 04 Jun 2009 10:20:00 +0800</pubDate><description><![CDATA[#include  int main() { int a[5]={7,8,9,10,11}; int *ptr1=(int *)(&a+1); ///这个主要是理解&a的类型是一个(int *)[]型的，所以&a+1会偏移一整个数组的长度。 int *ptr2=(int *)((int )a+1); ///这个主要涉及的是大小端的问题。 printf("%x,%x",ptr1[-1],*ptr2)]]></description><category></category></item><item><title><![CDATA[stl vector unique函数]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4239209</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4239209</guid><author>wangyadong</author><pubDate>Wed, 03 Jun 2009 15:18:00 +0800</pubDate><description><![CDATA[　我们都知道unique的功能是去除相邻的重复元素（只保留一个），还有一个容易忽视的特性是它并不真正把重复的元素删除，不知道这个特性用起来就会出问题。比如下面这个例子，企图输出无重复的元素，中国自学编程网，www.zxbc.cn ： #include  #include  #include  #include  using namespace std; int main()...{ 　　vecto]]></description><category></category></item><item><title><![CDATA[static 函数和变量]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4220332</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4220332</guid><author>wangyadong</author><pubDate>Wed, 27 May 2009 14:09:00 +0800</pubDate><description><![CDATA[static 声明的变量在C语言中有两方面的特征：　　1)、变量会被放在程序的全局存储区中，这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。　　2)、变量用static告知编译器，自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。Tips:　　A.若全局变量仅在单个C文件中访问，则可以将这个变量修改为静态全局变量，以降低模块间的耦合]]></description><category></category></item><item><title><![CDATA[printf的用法(总结)]]></title><link>https://blog.youkuaiyun.com/wangyadong/article/details/4208013</link><guid>https://blog.youkuaiyun.com/wangyadong/article/details/4208013</guid><author>wangyadong</author><pubDate>Fri, 22 May 2009 10:01:00 +0800</pubDate><description><![CDATA[基本类型包括字节型（char）、整型（int）和浮点型（float/double）。定义基本类型变量时，可以使用符号属性signed、unsigned（对于char、int），和长度属性short、long（对于int、double）对变量的取值区间和精度进行说明。下面列举了Dev-C++下基本类型所占位数和取值范围：符号属性     长度属性     基本型     所占位数  ]]></description><category></category></item></channel></rss>