<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shining100的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shining100</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shining100]]></copyright><item><title><![CDATA[在Red Hat Enterprise Linux 5.8上安装systemtap]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/8589060</link><guid>https://blog.youkuaiyun.com/shining100/article/details/8589060</guid><author>shining100</author><pubDate>Mon, 18 Feb 2013 20:32:08 +0800</pubDate><description><![CDATA[根据http://sourceware.org/systemtap/wiki/SystemTapOnRHEL5里面的内容了解到，由于systemtap有Red Hat Enterprise Linux 5的rpm包，所以我决定不使用源代码的方式，而是使用官方发布的rpm包进行安装。按照上面链接中的说明，安装需要利用rhn登陆redhat官方的repo，然后使用repo中的rpm包安装就行了。由于公]]></description><category></category></item><item><title><![CDATA[正确的iconv使用方法]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/8574854</link><guid>https://blog.youkuaiyun.com/shining100/article/details/8574854</guid><author>shining100</author><pubDate>Wed, 06 Feb 2013 21:47:26 +0800</pubDate><description><![CDATA[网上典型的代码是这一段：

char* ConvertEnc( char *encFrom, char *encTo, const char * in)
{
	static char bufin[1024], bufout[1024], *sin, *sout;
	int lenin, lenout, ret;
	iconv_t c_pt;

	if ((c_pt = iconv_open(e]]></description><category></category></item><item><title><![CDATA[crashrpt]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/7760872</link><guid>https://blog.youkuaiyun.com/shining100/article/details/7760872</guid><author>shining100</author><pubDate>Tue, 14 Aug 2012 00:10:51 +0800</pubDate><description><![CDATA[今天原本打算在谷歌上搜索处理SEH的文章，以使我不需要在每一个线程中使用__try{}__except()代码块包裹代码的情况下，就能在任意线程抛出SEH时生成MiniDump文件。不过最后的结果是处理SEH的文章没有搜索出几篇，却幸运的搜索出了满足我需要的工具crashrpt。
        crashrpt是一个包含能够在程序出现各种类型未处理异常时生成程序错误报告，然后将该报告按照指定的]]></description><category></category></item><item><title><![CDATA[多线程程序设计(二)]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6451462</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6451462</guid><author>shining100</author><pubDate>Sat, 28 May 2011 10:10:00 +0800</pubDate><description><![CDATA[通过前面的介绍，我们了解到了通过线程的并行和异步执行，给我们的程序带来的好处。但正如事物都是有两面性的，在享受线程给我们的应用程序带来的好处的时候，我们同时也应该解决它给我们所带来的问题，即线程同步问题。试想当有一个读线程和一个写线程同时操作一个链表，当读线程读取链表的一个节点的时候，由于系统的调度，此时写线程获得了执行的机会，并对同一个节点执行了写操作，并且最后完成了该操作。当系统再次调度读线程读取链表该节点内容的时候，该内容由于已经被写线程修改，导致我们读出了错误的数据。为了解决线程的同步问题，人们定义]]></description><category></category></item><item><title><![CDATA[多线程程序设计(一)]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6413381</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6413381</guid><author>shining100</author><pubDate>Wed, 11 May 2011 23:55:00 +0800</pubDate><description><![CDATA[当我们提到线程这个概念的时候，我们就不得不提到它的容器---进程。那什么是进程呢？进程是一个正在运行的程序，它拥有自己的内存地址空间以及其向系统所申请的其它资源。内存地址空间中包含有文本区域（text region）、数据区域（data region）以及栈区域（stack region）；所申请的资源包括该进程打开的文件以及套接字等系统资源。当进程被创建并在获得其运行所需要的所有资源过后，进程并不能自己开始执行。现在的进程就像一个植物人一样，由于大脑无法正常的工作，它除了躺在床上之外，是没有办法做其它任何]]></description><category></category></item><item><title><![CDATA[小技巧：如何令Edit Control滚动到最新的输出行]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6275753</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6275753</guid><author>shining100</author><pubDate>Thu, 24 Mar 2011 23:34:00 +0800</pubDate><description><![CDATA[     最近在做一个测试程序时，需要将程序的一些信息输出到Edit Control之中。在输出一定的信息后发现，Edit Control默认是不会自动滚动，将最新的输出显示到Edit Control中。     由于无法看到最新的显示信息，造成了我无法在第一时间看到最新的输出结果，所以我决定仿造VS的输出窗口，在输出信息时让滚动条自动滚动，以使我能够在第一时间查看到输出结果。     为了使Edit Control能够接收多行文本，你必须使用代码或者使用VS在界面设计器中将Edit Control的Mul]]></description><category></category></item><item><title><![CDATA[重构阻塞式服务器程序代码 ]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6171155</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6171155</guid><author>shining100</author><pubDate>Mon, 31 Jan 2011 21:31:00 +0800</pubDate><description><![CDATA[<br />    呵呵，偷了点懒，由于本文和上一篇文章的目的是重构网络程序的代码，所以这里只重构了Winsocket入门教程一：多线程阻塞式服务器和阻塞式客户端程序(TCP)服务器程序的网络部分，关于多线程部分的处理，起参考以上链接。<br />    // 此示例程序参考MSDN Winsocket Server Demo
// 示例和自己处理Winsocket程序的经验而成
// 不足和错误之处望大家指正
// 原始DEMO地址：http://msdn.microsoft.com/zh-cn/l]]></description><category></category></item><item><title><![CDATA[重构阻塞式客户端程序代码]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6145600</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6145600</guid><author>shining100</author><pubDate>Mon, 17 Jan 2011 01:48:00 +0800</pubDate><description><![CDATA[     在这几个月中阅读和编写了大量的套接字程序，所以对套接字程序的编写也有了新的认识
。现在这里分享出来与大家交流一下，不足之处还望大家指正。    这里的示例程序是修改自Winsocket入门教程一：多线程阻塞式服务器和阻塞式客户端程序(TCP)中的客户端程序。相对于原来的程序，主要进行了以下几个方面的处理：    1.添加了更好的错误处理代码。使用GOTO语句将错误处理放到一起，可以使错误处理的代码更利于维护，并且减少代码的重复(Code duplicate)    2.使用微软推荐的函数geta]]></description><category></category></item><item><title><![CDATA[RTSP简介以及常用方法使用实例]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/6030818</link><guid>https://blog.youkuaiyun.com/shining100/article/details/6030818</guid><author>shining100</author><pubDate>Tue, 23 Nov 2010 22:15:00 +0800</pubDate><description><![CDATA[<br />      实时流协议(RTSP),英文全称为Real Time Streaming Protocol。它是一个用来获取所需要属性(编码方式、分辨率或者帧率等)实时流以及控制实时流的应用层协议。<br />      RTSP是一个基于文本的协议，它与HTTP十分相似。在RTSP中，保留了几乎所有的HTTP符号以及相关定义。所以，RTSP十分利于扩展，并且容易使用程序进行解析。<br />      RTSP虽然可以用来获取实时流，但是协议中并没有定义传输实时流的方式。它通过与其它的传输机制配合]]></description><category></category></item><item><title><![CDATA[STL入门教程三：map的使用]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5976924</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5976924</guid><author>shining100</author><pubDate>Sun, 31 Oct 2010 00:05:00 +0800</pubDate><description><![CDATA[       map是C++标准库的关联容器之一，它是一种通过键值(key-value)对组合而成的容器。由于在容器内部对键值对中的键进行了特别的组织，所以我们可以通过搜索容器中的键,来快速的查询到我们所感兴趣的元素。同时，map中的键还具有唯一性。即map中如果存在待插入的键值，则此次的插入操作会失败。了解了这些基本的概念以后，让我们来结合map的具体使用方法，来加深对map的认识。      构造函数      explicit map ( const Compare& comp = Compare()]]></description><category></category></item><item><title><![CDATA[STL入门教程二：list的使用]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5910715</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5910715</guid><author>shining100</author><pubDate>Mon, 27 Sep 2010 23:58:00 +0800</pubDate><description><![CDATA[      上次给大家介绍了vector的用法，这次我为大家介绍另一个用途广泛的容器，那就是list。我们首先来比较一下两种容器的异同。vector和list在结构上都表现为数组，只不过vector是一个其中的元素都在一块内存中连续分布的数组，类似于C/C++在栈上定义一个数组的内存布局；而list中元素在内存中的布局不是连续的，其类似于C/C++在堆上定义一个数组的内存布局。由于在内存布局上的差异，使这两种容器要根据不同的场合来选择使用。      如需要快速访问容器中元素的场合，我们应该使用vector]]></description><category></category></item><item><title><![CDATA[STL入门教程一：vector的使用]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5833336</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5833336</guid><author>shining100</author><pubDate>Mon, 23 Aug 2010 23:52:00 +0800</pubDate><description><![CDATA[         vector应该说是在STL中使用最广泛的容器，也是本人最先学习和使用的STL内容O(∩_∩)O~。为什么vector会使用的非常广泛呢？大家知道，数组是几乎每一种语言都拥有的低级(不是不高级的意思哈，就是比较等层的意思O(∩_∩)O~)数据结构，在我们的工作中，我们会大量的使用数组来表示同一类事物的一个集合。而vector实质上就是一个可以存储任何元素的动态数组。vector虽然不是一个低级的数据结构，但是它各个操作的效率几乎是和数组相同的。只是它会使用比普通数组更多的空间。因为在vec]]></description><category></category></item><item><title><![CDATA[Winsocket入门教程三：以Windows消息机制驱动的客户端程序]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5764368</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5764368</guid><author>shining100</author><pubDate>Sun, 25 Jul 2010 13:07:00 +0800</pubDate><description><![CDATA[     前面两讲为大家介绍了编写传统socket程序的两种方法，今天将为大家介绍一种使用Windows消息机制编写socket客户端程序的方法。使用Windows消息机制编写socket程序主要有一下的好处：一是我们可以将大部分的recv操作以及close操作放到消息处理函数里面，以利于代码的维护；二是当有数据可读的时候，socket程序会接到相应的消息，我们可以在这时候读取数据。大家可以想像一下，在传统的socket程序中，如果一个程序在你没有向它发送请求的时候给你传送数据的话，你如果没有进行相应的检测]]></description><category></category></item><item><title><![CDATA[ Winsocket入门教程二：非阻塞式服务器和客户端程序(TCP)]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5651878</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5651878</guid><author>shining100</author><pubDate>Sun, 06 Jun 2010 23:20:00 +0800</pubDate><description><![CDATA[上次为大家介绍了阻塞式多线程服务端程序和阻塞式客户端程序的设计方法，但是在上文的最后也提到过，服务器程序会因为建立连接和关闭连接而频繁的创建和关闭线程会产生大量的内存碎片，从而导致服务端程序不能保证长时间的稳定运行。因此我在这里为大家介绍另外一种建立服务器和客户端程序的方法，即建立非阻塞式的服务器和客户端程序。那什么是非阻塞呢？非阻塞是相对于阻塞而言，阻塞指的是在进行一个操作的时候，如服务器接收客户端的连接(accept)，服务器或者客户端读写数据(read、write)，如果该操作没有执行完成(成功或者失]]></description><category></category></item><item><title><![CDATA[Winsocket入门教程一：多线程阻塞式服务器和阻塞式客户端程序(TCP)]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5571644</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5571644</guid><author>shining100</author><pubDate>Sun, 09 May 2010 12:21:00 +0800</pubDate><description><![CDATA[      最近因为工作需要学习了Winsocket客户端服务器模型程序的设计。在学习的过程中，我发现学习Winsocket的资料不多并且十分的零散。我一直没有找到一本学习Winsocket方面的经典国外著作。而且这些资料中并没有提供源代码文件，所以我只有将这些源代码在自己敲一遍。在敲代码的过程中，我发现了这些源代码中的一些错误的地方和一些已经过时的Windows程序的输写方法(Win16?)。现]]></description><category></category></item><item><title><![CDATA[如何为应用程序添加托盘图标]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5525420</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5525420</guid><author>shining100</author><pubDate>Sat, 24 Apr 2010 22:18:00 +0800</pubDate><description><![CDATA[      对于一些不是很需要与用户交互的应用程序来说，在应用程序最小化的时候将它变成托盘图标。对用户来说是一种不错的用户体验。那这个功能应该怎么样实现呢？其实实现功能十分的简单，我们只需要调用Shell_NotifyIcon函数就可以为应用程序添加托盘图标。然后我们只需要在提供一个回调函数处理相应的消息就可以了。      让我们来看一看Shell_NotifyIcon函数，该函数的完整声明]]></description><category></category></item><item><title><![CDATA[C++常见编译连接错误]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5500116</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5500116</guid><author>shining100</author><pubDate>Sun, 18 Apr 2010 21:07:00 +0800</pubDate><description><![CDATA[      最近新到一家公司任职，编译公司项目的时候出现了一些古怪的编译错误和警告，现将这些错误和警告，以及解决这些错误和警告的方法贴出来。希望对大家有所帮助。      1.warning C4996: “strcpy”被声明为否决的.e:/开发工具/microsoft visual studio 8/vc/include/string.h(73) : 参见“strcpy”的声明.消息:“T]]></description><category></category></item><item><title><![CDATA[CRT字符串函数代码赏析]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5452989</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5452989</guid><author>shining100</author><pubDate>Mon, 05 Apr 2010 22:39:00 +0800</pubDate><description><![CDATA[      最近去了几家公司面试，面试之前各家公司都拿出了一套笔试题出来做。这几家公司的笔试题在C/C++部分都有一个特点是：题目中有大量对字符串相关函数的考查：如一家公司要求写出strcpy函数，一家要求写出itoa函数等。究其原因，我认为通过字符串函数能很好的考查面试者对C++的内存管理机制的理解以及面试者对指针操作的熟悉程度。内存管理和指针操作又是使用C++编写程序的基础，如果C/C++程序]]></description><category></category></item><item><title><![CDATA[人民币数字转换为汉字]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5414001</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5414001</guid><author>shining100</author><pubDate>Wed, 24 Mar 2010 23:35:00 +0800</pubDate><description><![CDATA[      最近在QQ上收到以前一个师弟的信息，说是老师给他们出了一个题，即输入人民币金额，然后将输入的金额转换为汉字。例如输入1234，就输出一千二百三十四元。师弟说他想了很久，没有想出来，让我帮一下他忙。我心想这题应该很简单，半个小时就可以搞定了，哪知一做才发现这题里面还是真有一些玄机，最后搞了两个多小时才做出来,真是十分的惭愧呀(-_-)现将代码和思路放上来供各位共赏，如果那位大牛有更好的思]]></description><category></category></item><item><title><![CDATA[创建不能改变大小的对话框]]></title><link>https://blog.youkuaiyun.com/shining100/article/details/5383670</link><guid>https://blog.youkuaiyun.com/shining100/article/details/5383670</guid><author>shining100</author><pubDate>Mon, 15 Mar 2010 23:43:00 +0800</pubDate><description><![CDATA[      在我们开发的过程中，需要实现大量的弹出式对话框。其中有一些对话框由于在响应WM_SIZE消息时没有移动相应控件的位置，导致了在改变对话框的大小后，对话框中的控件并不会随着窗体大小的改变而移动位置。解决这个问题有两个方法：一是在WM_SIZE消息中添加相应的处理代码，使控件随着窗口大小的改变而移动其位置和调整其大小。二就是创建不能改变大小的对话框。至于选择哪一种方法则要根据具体的要求而定]]></description><category></category></item></channel></rss>