<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[flyound的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/flyound</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; flyound]]></copyright><item><title><![CDATA[DLL Hell的产生和如何有效的避免]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/13023305</link><guid>https://blog.youkuaiyun.com/flyound/article/details/13023305</guid><author>flyound</author><pubDate>Fri, 25 Oct 2013 17:40:41 +0800</pubDate><description><![CDATA[Dll Hell究竟是何物



DLL HELL字面意思是DLL"地狱"，是由于DLL组件升级引起的程序不能运行的情况。共享模块常常被编译为Dll文件。Dll共享的方式虽然很不错，但是它自身存在致命的缺陷。由于Dll模块可以被重用，这样多个程序可能使用一个Dll模块 ，如果这个Dll模块升级了，就很有可能出现其中某个程序无法和新的Dll模块很好的兼容起来，导致程序不能运行的情况，这种情况]]></description><category></category></item><item><title><![CDATA[Java开发中的23种设计模式详解]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8808739</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8808739</guid><author>flyound</author><pubDate>Tue, 16 Apr 2013 14:22:09 +0800</pubDate><description><![CDATA[设计模式（Design Patterns）

                                  ——可复用面向对象软件的基础

设计模式（Design pattern）是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问，设计模式于己于他人于系统都是多赢的，设计模式使代码编制真]]></description><category></category></item><item><title><![CDATA[Wince内存泄露检测工具Application Verifier的使用和如何快速定位泄露语句(二)]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8240100</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8240100</guid><author>flyound</author><pubDate>Thu, 29 Nov 2012 18:28:28 +0800</pubDate><description><![CDATA[通过Application Verifier在wince端生成日志文件后，我们将文件拷贝到PC上通过PC端的工具进行日志分析，我们就可以定位出泄漏地址的代码行位置了，这里有个前提条件，那就是需要我们在编译程序时将程序的调试信息打开，VS2008设置选项配置方法如下:
1.配置属性 => C/C++ => 常规 => 调试信息格式 => 程序数据库(/Zi)
2.配置属性 => 链接器 => 调]]></description><category></category></item><item><title><![CDATA[Wince内存泄露检测工具Application Verifier的使用和如何快速定位泄露语句(一)]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8239852</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8239852</guid><author>flyound</author><pubDate>Thu, 29 Nov 2012 16:41:28 +0800</pubDate><description><![CDATA[大家在wince开发过程会发现跟PC上的开发的差距很大，一些在PC上的调试技巧之类的辅助功能都无法使用，比如内存泄露的检测等，那么这篇文章就是告诉大家如何使用wince上的内存检测工具帮助大家找出内存泄露。这里给大家介绍的软件为Application Verifier，是微软自己开发用于监测wince系统的内存和一些内核对象未释放造成内存泄露的辅助工具。该工具只需要在wince上运行指定监控的程序]]></description><category></category></item><item><title><![CDATA[SendMessage不为人知的秘密]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8237883</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8237883</guid><author>flyound</author><pubDate>Thu, 29 Nov 2012 12:14:51 +0800</pubDate><description><![CDATA[SendMessage的说明我这里就不再复述了，相信大家应该都很了解，写这篇文件的目的就是让大家更好的了解SendMessage机制和运行原理，好吧我们开始吧。
SendMessage的调用如果是在窗口消息线程本身调用时是直接调用程序的WinProc的消息处理函数的，那么在其他线程是怎么样的呢，那么这个问题就是我写这篇文章的主要目的。当系统发现调用SendMessage的代码处于非窗口线程那么该]]></description><category></category></item><item><title><![CDATA[关于多线程操作同步对象造成死锁的解决方式(二)]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8235702</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8235702</guid><author>flyound</author><pubDate>Wed, 28 Nov 2012 18:52:13 +0800</pubDate><description><![CDATA[上篇文字介绍到如果有效避免死锁的发生，那么这篇文件将介绍当死锁发生时我们如何知道并能够得知死锁发生的情形，然后快速解决它。 那么这篇文章主要讲解原理性东西不会贴很多代码，下面进入正题。
      在上篇文件定义了自动锁安全类后，我们看到有些函数进行了重载，其中参数有文件名，函数名，代码行等参数，那么这个信息就是帮助我们定位死锁时代码执行到哪个位置的信息，那么我们如何传入这些参数呢？我们可以用宏]]></description><category></category></item><item><title><![CDATA[关于多线程操作同步对象造成死锁的解决方式(一)]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8235667</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8235667</guid><author>flyound</author><pubDate>Wed, 28 Nov 2012 18:13:46 +0800</pubDate><description><![CDATA[在多线程编程成中经常需要进行数据同步等操作，在临界区等对象使用时容易出现忘记退出临界区操作或中间执行的代码发生异常导致退出临界区代码未被正常执行，这个时候就很容易出现死锁现象了，那么我们这么解决上述问题呢？ 
        这个问题解决的办法其实很简单，采用临时对象的方式去解决，也就是写一个自动锁的类，这个类用于接收一个临界区指针或引用，在构造时自动进入临界区，析构时自动退出临界区，那么我们也]]></description><category></category></item><item><title><![CDATA[wince多线程上使用FindWindow可能导致死锁]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8064693</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8064693</guid><author>flyound</author><pubDate>Fri, 12 Oct 2012 15:23:48 +0800</pubDate><description><![CDATA[今天同事问我这个事情，我原本也不大相信的后来测试发现果真存在这个问题，PC上不存在的，测试代码如下：


DWORD WINAPI TestThreadProc(void * pParam) 
// 查找Window句柄线程
{
printf("\nStart:%s\n", __FUNCTION__);


FindWindow(NULL, L"asdasdqwejqwe");]]></description><category></category></item><item><title><![CDATA[Wince如何生成Dump文件，通过Windbg进行错误现场还原和Bug修复]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/8049231</link><guid>https://blog.youkuaiyun.com/flyound/article/details/8049231</guid><author>flyound</author><pubDate>Mon, 08 Oct 2012 18:04:30 +0800</pubDate><description><![CDATA[本文来源于本人的培训PPT文档，时间原因，本人也就懒得去重新梳理这些文本的表达方式了，看起来可能有些吃力，还望见谅，下面就开始正题吧。


当我们编写的程序出现错误现象时，我们是怎么去解决的？

让测试人员复现错误步骤，然后调试。

分析错误发生原因,然后调试工程试图复现错误。

根据错误地址查找错误代码行。

增加日志输出记录函数运行的流水线。

......]]></description><category></category></item><item><title><![CDATA[深入探索Win32结构化异常处理]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7968258</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7968258</guid><author>flyound</author><pubDate>Tue, 11 Sep 2012 18:01:09 +0800</pubDate><description><![CDATA[文章来源:http://blog.youkuaiyun.com/diamont/article/details/4259590




在Win32操作系统提供的所有功能中，使用最广泛而又没有公开的恐怕要数结构化异常处理（ Structured Exception Handling ，SEH ）
 了。当你考虑Win32结构化异常处理时，也许会想到__try、__finally和__except等]]></description><category></category></item><item><title><![CDATA[成员函数指针与高性能的C++委托（下篇）]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7517858</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7517858</guid><author>flyound</author><pubDate>Fri, 27 Apr 2012 16:50:59 +0800</pubDate><description><![CDATA[Member Function Pointers and the Fastest Possible C++ Delegates

撰文： Don Clugston

翻译：周翔

（接中篇）

委托（delegate ）

和成员函数指针不同，你不难发现委托的用处。最重要的，使用委托可以很容易地实现一个Subject/Observer设计模式的改进版 [GoF, p. 293]]]></description><category></category></item><item><title><![CDATA[成员函数指针与高性能的C++委托（中篇）]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7517855</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7517855</guid><author>flyound</author><pubDate>Fri, 27 Apr 2012 16:50:24 +0800</pubDate><description><![CDATA[Member Function Pointers and the Fastest Possible C++ Delegates

撰文： Don Clugston

翻译：周翔

（接上篇）

成员函数指针——为什么那么复杂？

类的成员函数和标准的 C函数有一些不同。与被显式声明的参数相似，类的成员函数有一个隐藏的参数 this ，它指向一个类的实例。根据不同的编译器， th]]></description><category></category></item><item><title><![CDATA[成员函数指针与高性能的C++委托（上篇）]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7517846</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7517846</guid><author>flyound</author><pubDate>Fri, 27 Apr 2012 16:49:21 +0800</pubDate><description><![CDATA[引子


标准C++中没有真正的面向对象的函数指针。这一点对C++来说是不幸的，因为面向对象的指针（也叫做"闭包（closure）"或"委托 （delegate）"）在一些语言中已经证明了它宝贵的价值。在Delphi (Object Pascal)中，面向对象的函数指针是Borland可视化组建库（VCL，Visual Component Library）的基础。而在目前，C#使"委托"的概]]></description><category></category></item><item><title><![CDATA[DirectUI下不规则按钮的点选方式]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7433105</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7433105</guid><author>flyound</author><pubDate>Fri, 06 Apr 2012 17:47:10 +0800</pubDate><description><![CDATA[相信很多同学在开发界面时总会出现一些不规则形状的控件需要进行精确的点选的问题。
开发MFC的都会通过读取一张位图或者Png图，通过颜色值判断合并到一个CRgn(HRGN)多边形区域，然后设置到窗口上，windows会自动处理点选的情况。
但是在DirectUI上全局都只使用一个窗口进行贴图绘制的，上面的方式显然不是很方便，但是还有种方式可以解决的，那就是OpenGL 中的颜色颜色拾取。
首先]]></description><category></category></item><item><title><![CDATA[关于多继承，dynamic_cast转换失败的问题]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/7007416</link><guid>https://blog.youkuaiyun.com/flyound/article/details/7007416</guid><author>flyound</author><pubDate>Thu, 24 Nov 2011 11:47:34 +0800</pubDate><description><![CDATA[今天在编写程序时，需要将一个基类指针安全转换成子类指针，采用C++的dynamic_cast进行动态类型转换，正常情况下能进行转换则返回转换成功后的指针，转换失败则返回NULL，但是我进行编码测试时确实已经确定了基类和子类都是正常的但始终返回NULL,后面查出，原来子类是私有继承自基类的，导致转换失败，改为公有继承则转换成功。
代码模型如下
class Base
{
}；


cla]]></description><category></category></item><item><title><![CDATA[不定参函数使用纪要]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/6924159</link><guid>https://blog.youkuaiyun.com/flyound/article/details/6924159</guid><author>flyound</author><pubDate>Tue, 01 Nov 2011 11:15:30 +0800</pubDate><description><![CDATA[int FormatString(const char * szFormat, const char * pTest, ....)
{

char szBuf[1024] = {0};
  va_list argptr;
  va_start(argptr, pTest);//此处第二个参数为，从指定变量的地址后，开始取参数列表
  szBuf[1023] = '\0';
  _vs]]></description><category></category></item><item><title><![CDATA[win32上多线程使用setTimeEvent可能引起死锁]]></title><link>https://blog.youkuaiyun.com/flyound/article/details/6914496</link><guid>https://blog.youkuaiyun.com/flyound/article/details/6914496</guid><author>flyound</author><pubDate>Fri, 28 Oct 2011 14:56:09 +0800</pubDate><description><![CDATA[今天在写UI框架的时候需要定时器主动刷新UI，用普通WM_TIMER事件不能满足需求，所以换成setTimerEvent函数，当在多线程时同时访问时就出现死锁。原因为在setTimerEvent的回调函数调用前系统会做同步操作(临界区)，而刚好在回调函数中有自己的临界区操作，而刚好在另外一线程进入该临界区后调用setTimerEvent函数时就会出现死锁。]]></description><category></category></item></channel></rss>