<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[int main( ) { }]]></title><description><![CDATA[点滴记录，共同成长]]></description><link>https://blog.youkuaiyun.com/sockpuppet007</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sockpuppet007]]></copyright><item><title><![CDATA[编程思想：从实例谈面向对象编程(OOP)、工厂模式和重构]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6144191</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6144191</guid><author>sockpuppet007</author><pubDate>Sun, 16 Jan 2011 13:18:00 +0800</pubDate><description><![CDATA[转载：http://www.iplaysoft.com/oop-factory-reconstruct.html有了翅膀才能飞，欠缺灵活的代码就象冻坏了翅膀的鸟儿。不能飞翔，就少了几许灵动的气韵。我们需要给代码带去温暖的阳光，让僵冷的翅膀重新飞起来。结合实例，通过应用OOP、设计模式和重构，你会看到代码是怎样一步一步复活的。
为了更好的理解设计思想，实例尽可能简单化。但随着需求的增加，程序将越来越复杂。此时就有修改设计的必要，重构和设计模式就可以派上用场了。最后当设计渐趋完美后，你会发现，即使需求不断增加]]></description><category></category></item><item><title><![CDATA[ 《Windows核心编程》第9章 用内核对象进行线程同步]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096796</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096796</guid><author>sockpuppet007</author><pubDate>Fri, 24 Dec 2010 17:37:00 +0800</pubDate><description><![CDATA[在用户模式下进行线程同步的好处就是速度快。如果关心应用程序的性能，则应该优先考虑在用户模式下的同步机制能否适用。
内核对象都有触发和未触发两种状态，微软创建了一些规则，用来规定如何在这两种状态之间进行转换。比如，进程（线程）内核对象在创建的时候总是处于未触发状态。当进程（线程）终止的时候，操作系统会自动使进程（线程）内核对象变成触发状态。当进程（线程）内核对象被触发后，它将永远保持这种状态，再也不会变回到为触发状态。
等待函数使一个线程自愿进入等待状态，直到指定的内核对象被触发为止。如果线程在调用一个等]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第8章 用户模式下的线程同步]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096777</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096777</guid><author>sockpuppet007</author><pubDate>Fri, 24 Dec 2010 17:31:00 +0800</pubDate><description><![CDATA[<br />在以下两种基本情况下，线程之间需要相互通信：<br />
●    需要让多个线程同时访问一个共享资源，同时不能破坏资源的完整性。<br />
●    一个线程需要通知其他线程某项任务已经完成。<br /><br />
原子访问指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。<br /><br />
Interlocked系列的函数会以原子方式来操控一个值。比如如果想以原子方式给一个值加1，可以使用InterlockedIncrement函数。注意，必须]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第7章 线程调度、优先级和关联性]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096772</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6096772</guid><author>sockpuppet007</author><pubDate>Fri, 24 Dec 2010 17:30:00 +0800</pubDate><description><![CDATA[每个线程都有一个上下文，后者保存在线程的内核对象中。这个上下文反映了线程 执行时CPU寄存器的状态。
Windows被称为抢占式多线程操作系统，它可以在任何时刻停止一个线程而另行调度另外一个线程。
如果ResumeThread函数成功，它将返回线程的前一个挂起计数；否则它将返回0xFFFFFFFF。一个线程可以被多次挂起。线程被挂起多少次，就必须恢复多少次，这样才能变为可调度状态。挂起线程可以使用SuspendThread函数，它也返回线程之前的挂起计数。
线程可以通过调用Sleep函数告诉系统，在一]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第6章 线程基础]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6090708</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6090708</guid><author>sockpuppet007</author><pubDate>Wed, 22 Dec 2010 00:29:00 +0800</pubDate><description><![CDATA[线程有两个部分组成：
1)线程内核对象。操作系统用它管理线程，它也是系统用来存放线程统计信息的地方。
2)线程栈。用于维护线程执行时所需的所有函数参数和局部变量。
每个线程都必须有一个入口点函数，这是线程执行的起点。如果想在进程中创建辅助线程，它必须有自己的入口点函数，形式如下：
DWORD WINAPI ThreadFunc(PVOID pvParam){
    DWORD dwResult = 0;
    …
    Return dwResult;
}
线程函数最终将终止运行并返]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第5章 作业]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088076</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088076</guid><author>sockpuppet007</author><pubDate>Tue, 21 Dec 2010 00:20:00 +0800</pubDate><description><![CDATA[<br />Windows提供了一个作业(Job)内核对象，它允许将进程组合在一起并创建一个"沙箱"来限制进程能够做什么。最好将作业对象想象成一个进程容器。但是，创建只包含一个进程的作业也是非常有用，因为这样可以对进程施加平时不能施加的限制。<br /><br />
通过给函数BOOL IsProcessInJob (HANDLE ProcessHandle,HANDLE JobHandle,PBOOL Result);<br />
的第二个参数传递NULL，可以验证某个进程是否在一个现有的作业控制之下]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第4章 进程]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088074</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088074</guid><author>sockpuppet007</author><pubDate>Tue, 21 Dec 2010 00:19:00 +0800</pubDate><description><![CDATA[<br />进程通常被定义成一个正在运行的程序的一个实例。它由两部分构成：<br />
1) 一个内核对象，操作系统用它来管理进程；<br />
2) 一个地址空间，其中含所有可执行文件或DLL 模块的代码和数据。<br /><br />
一个进程可以有一个或多个线程，所有线程都在进程的地址空间中执行其代码。每个进程至少要有一个线程来执行进程地址空间包含的代码。当系统创建进程的时候，会自动为进程创建第一个线程，称之为主线程。<br /><br />
对于所有要运行的线程，操作系统会轮流为每个线程调度]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第3章 内核对象]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088072</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088072</guid><author>sockpuppet007</author><pubDate>Tue, 21 Dec 2010 00:18:00 +0800</pubDate><description><![CDATA[<br />Windows 系统创建和处理的内核对象有：访问令牌对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、邮件槽对象、互斥对象、管道对象、进程对象、信号量对象、线程对象、可等待的计时器对象以及线程池工厂对象等等。利用Sysinternals提供的免费工具WinObj可以查看一个包含所有内核对象类型的列表。<br /><br />
每个内核对象都只是一个内存块，它由操作系统内核分配，并只能由操作系统内核访问。该内存块是一个数据结构，其成员维护着与对象相关的信息。少数成员（如安全描]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第2章 Unicode]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088064</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088064</guid><author>sockpuppet007</author><pubDate>Tue, 21 Dec 2010 00:16:00 +0800</pubDate><description><![CDATA[<br />应用软件可以从各种不同的函数中获得特定国家的信息，并可观察控制面板的设置，以确定用户的首选项。软件的本地化要解决的真正问题，实际上就是如何来处理不同的字符集。<br /><br />
有些文字和书写规则（比如中文）的字符集中的符号太多了，因此单字节（它提供的符号最多不能超过256个）是根本不够使用。为此出现了双字节字符集（DBCS），以支持这些文字和书写规则。在双字节字符集中，字符串中的每个字符可以包含一个字节或包含两个字节。<br /><br />
Unicode提供了一种简单而又一致的表]]></description><category></category></item><item><title><![CDATA[《Windows核心编程》第1章 对程序错误的处理]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088042</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6088042</guid><author>sockpuppet007</author><pubDate>Tue, 21 Dec 2010 00:07:00 +0800</pubDate><description><![CDATA[<br />当调用一个Windows函数时，它首先要检验传递给它的的各个参数的有效性，然后再设法执行任务。如果传递了一个无效参数，或者由于某种原因无法执行这项操作，那么操作系统就会返回一个值，指明该函数在某种程度上运行失败了。<br /><br />
一个Windows函数返回的错误代码对了解该函数为什么会运行失败常常很有用。微软公司编译了一个所有可能的错误代码的列表，并且为每个错误代码分配了一个32位的号码。<br /><br />
当一个Windows函数检测到一个错误时，它会使用一个称为线程本地存]]></description><category></category></item><item><title><![CDATA[获取提升类型和判断进程是否以管理员身份运行]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087945</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087945</guid><author>sockpuppet007</author><pubDate>Mon, 20 Dec 2010 23:02:00 +0800</pubDate><description><![CDATA[<br />在任务管理器的例子中，任务管理器在进程选项卡的底部要么显示一个盾牌图标，要么显示一个复选框，具体取决于它是如何生成的。由此带来两个问题：如何判断应用程序是否是以管理员身份运行；如何判断它是以提升的权限来启动的，还是正在使用筛选的令牌运行。<br />
下面的GetProcessElevation函数能返回提升类型和一个指出进程是否正在以管理员身份运行的布尔值。具体代码如下：<br />#include <shlobj.h>     // for IsUserAnAdmin.
BOOL Get]]></description><category></category></item><item><title><![CDATA[Ubuntu系统下GTK安装]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087940</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087940</guid><author>sockpuppet007</author><pubDate>Mon, 20 Dec 2010 23:00:00 +0800</pubDate><description><![CDATA[<br />1. GTK的安装<br />
#这将安装gcc/g++/gdb/make 等基本编程工具<br />
sudo apt-get install build-essential<br /><br />
#这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件<br />
sudo apt-get install gnome-core-devel<br /><br />
#用于在编译GTK程序时自动找出头文件及库文件位置<br />
sudo apt-g]]></description><category></category></item><item><title><![CDATA[主机与VMware的Linux虚拟机之间共享交换文件]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087935</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087935</guid><author>sockpuppet007</author><pubDate>Mon, 20 Dec 2010 22:58:00 +0800</pubDate><description><![CDATA[搭建环境：
主机系统：Windows7 Ultimate
VM软件：VMware Workstation 7.1.3
虚拟机系统：Linux Ubuntu 10.10
操作步骤：
1）在主机上新建一个共享路径，用于将来和虚拟机之间进行共享文件
如：L:/ShareFolder4VM
在VMware中选择虚拟机，右键Virtual Machine Settings，选中Options，选择Shared Folders，在右边界面中配置共享文件夹，Host path选择之前新建的路径；
2）在L]]></description><category></category></item><item><title><![CDATA[C++各大有名库的介绍]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087925</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087925</guid><author>sockpuppet007</author><pubDate>Mon, 20 Dec 2010 22:55:00 +0800</pubDate><description><![CDATA[<br />在C++中，库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中，C++的库门类繁多，解决的问题也是极其广泛，库从轻量级到重量级的都有。不少都是让人眼界大开，亦或是望而生叹的思维杰作。由于库的数量非常庞大，而且限于笔者水平，其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。<br /><br />C++各大有名库的介绍——C++标准库<br />
标准库中提供了C++程序的基本设施。虽然C++标准库随着C+]]></description><category></category></item><item><title><![CDATA[C++中单例模式对象的释放控制]]></title><link>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087907</link><guid>https://blog.youkuaiyun.com/sockpuppet007/article/details/6087907</guid><author>sockpuppet007</author><pubDate>Mon, 20 Dec 2010 22:43:00 +0800</pubDate><description><![CDATA[单例模式也称为单件模式、单子模式。使用单例模式，保证一个类仅有一个实例，并提供一个访问它的全局访问点，该实例被所有程序模块共享。有很多地方需要这样的功能模块，如系统的日志输出等。
单例模式有许多种实现方法，在C++中，甚至可以直接用一个全局变量做到这一点，但这样的代码显得很不优雅。《设计模式》一书中给出了一种很不错的实现，定义一个单例类，使用类的私有静态指针变量指向类的唯一实例，并用一个公有静态方法获取该实例。如下面的类定义：class CSingleton:
{
  public:
    sta]]></description><category></category></item></channel></rss>