<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>一无所知 - [P]编程技术</title><link>http://blog.csdn.net/caviler/category/77213.aspx</link><description /><dc:language>zh-CN</dc:language><lastUpdateTime>Mon, 09 Oct 2006 18:34:01 GMT</lastUpdateTime><ttl>60</ttl><item><dc:creator>一无所知</dc:creator><title>【编程】架构 - 介绍 .NET Framework 3.0</title><link>http://blog.csdn.net/caviler/archive/2006/09/21/1259148.aspx</link><pubDate>Thu, 21 Sep 2006 10:27:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/09/21/1259148.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/1259148.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/09/21/1259148.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/1259148.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1259148</trackback:ping><description>.NET Framework 3.0 是由 Windows 编程模型演变而来。它建立于 .NET Framework 2.0 的基础之上并加以扩展，目的是支持现代应用程序的构建。为此，该 3.0 版本采用了大量的最新技术，可以解决当今应用程序开发中的种种难题。通过在公共基础上建立这种多样性，Microsoft 致力于使软件的整体效果大于各个部分之和，从而让开发人员以更加一致的方式使用 .NET Framework 3.0 的不同部分来构建应用程序。&lt;img src ="http://blog.csdn.net/caviler/aggbug/1259148.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】技巧 - Inside CRT: Debug Heap Management(转帖)</title><link>http://blog.csdn.net/caviler/archive/2006/08/16/1074118.aspx</link><pubDate>Wed, 16 Aug 2006 14:46:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/08/16/1074118.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/1074118.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/08/16/1074118.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/1074118.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=1074118</trackback:ping><description>【编程】工具 - Inside CRT: Debug Heap Management(转帖)&lt;img src ="http://blog.csdn.net/caviler/aggbug/1074118.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】代码 - 监视文件修改(采用完成端口和ReadDirectoryChangesW同时在一个线程中监视多个目录，并且能够判断文件是否完全复制完毕)</title><link>http://blog.csdn.net/caviler/archive/2006/06/12/791714.aspx</link><pubDate>Mon, 12 Jun 2006 15:46:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/06/12/791714.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/791714.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/06/12/791714.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/791714.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=791714</trackback:ping><description>今天在改进文件监视程序时写的框架代码，监视文件修改(采用完成端口和ReadDirectoryChangesW同时在一个线程中监视多个目录，并且能够判断文件是否完全复制完毕)&lt;img src ="http://blog.csdn.net/caviler/aggbug/791714.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】技巧 - 消除 C4511 和 C4512 编译警告</title><link>http://blog.csdn.net/caviler/archive/2006/05/08/713084.aspx</link><pubDate>Mon, 08 May 2006 16:18:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/05/08/713084.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/713084.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/05/08/713084.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/713084.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=713084</trackback:ping><description>如果在程序中打开最高级别的编译警告选项，并且在适当的地方加入如下语句

#pragma warning(default: 4511) 

#pragma warning(default: 4512)


则编译器会检查那些没有声明“拷贝构造函数”和“赋值操作符重载”的类，并且报告 C4511 和 C4512 编译警告，例如：

class Class1
{
public:
    Class1();
 virtual ~ Class1();

};


我们只要加上“拷贝构造函数”和“赋值操作符重载”声明即可消除这个警告，并且这样也符合著名的“大三规则”，即：如果一个类需要任何下列的三个成员函数之一，便三者全部要实现，这三个成员函数是：拷贝构造，赋值操作符，析构函数。

class Class1
{
public:
    Class1();
 virtual ~ Class1();

public:
 Class1(const Class1&amp;); // 拷贝构造函数(消除 C4511 编译警告)
 Class1&amp; operato&lt;img src ="http://blog.csdn.net/caviler/aggbug/713084.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title> 【编程】技巧 - 多线程下的随机数初始化 srand()</title><link>http://blog.csdn.net/caviler/archive/2006/04/05/651734.aspx</link><pubDate>Wed, 05 Apr 2006 17:22:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/04/05/651734.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/651734.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/04/05/651734.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/651734.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=651734</trackback:ping><description>今天在调试程序时候发现某个线程中的 rand() 随机函数每次运行都返回同一个数据，检查了程序，在程序中也调用了 srand(GetTicketCount()) 来初始化随机数生成器，那为什么每次运行结果还一样呢？？？

后来发现，这个问题和多线程有关，跟踪 srand 和 rand 的函数内部后发现，其实 srand 和 rand 内部是使用了TlsGetValue等函数来存储随机数种子了，也就是说，这个随机数种子对每个线程都需要初始化一次 srand，而以前的代码是在主线程中初始化了一次，当然每次的结果都一样了。



void __cdecl srand (
        unsigned int seed
        )
{
#ifdef _MT

        _getptd()-&gt;_holdrand = (unsigned long)seed;

#else  /* _MT */
        holdrand = (long)seed;
#endif  /* _MT */
}

_ptiddata __cdecl _getp&lt;img src ="http://blog.csdn.net/caviler/aggbug/651734.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】优化 - 优化开关导致 DevPartner Performance Analysis 中无法分析源代码</title><link>http://blog.csdn.net/caviler/archive/2006/03/10/621237.aspx</link><pubDate>Fri, 10 Mar 2006 18:50:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/03/10/621237.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/621237.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/03/10/621237.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/621237.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=621237</trackback:ping><description>今天在用优化代码时发现有几个程序在 DevPartner Performance Analysis 中始终没有源代码分析结果。

开始还以为是 DevPartner Performance Analysis  设置问题，弄了半天，后来经过仔细比较，原来是程序中包含了一个用于优化程序大小和速度的头文件， 而这个头文件中又包含了下列语句

#pragma comment(linker,"/merge:.text=.data")

就是加上这个合并段后优化导致 DevPartner Performance Analysis 认为程序没有源代码，郁闷郁闷！把这句话注释掉后  DevPartner Performance Analysis 就分析正常了。&lt;img src ="http://blog.csdn.net/caviler/aggbug/621237.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】多线程 - MSDN: 解开 Windows 下的临界区中的代码死锁</title><link>http://blog.csdn.net/caviler/archive/2006/03/10/620592.aspx</link><pubDate>Fri, 10 Mar 2006 10:54:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/03/10/620592.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/620592.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/03/10/620592.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/620592.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=620592</trackback:ping><description>解开 Windows 下的临界区中的代码死锁
Matt Pietrek和 Russ Osterlund
本文假定您熟悉 Win32、C++ 和多线程处理。

下载本文的代码：CriticalSections.exe (415KB) 

摘要

临界区是一种防止多个线程同时执行一个特定代码节的机制，这一主题并没有引起太多关注，因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时，对 Windows 中临界区的深刻理解非常有用。 本文深入研究临界区的原理，以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序，可以显示所有临界区及其当前状态。

在我们许多年的编程实践中，对于 Win32® 临界区没有受到非常多的“under the hood”关注而感到非常奇怪。当然，您可能了解有关临界区初始化与使用的基础知识，但您是否曾经花费时间来深入研究 WINNT.H 中所定义的 CRITICAL_SECTION 结构呢？在这一结构中有一些非常有意义的好东西被长期忽略。我们将对此进行补充，并向您介绍一些很有意义的技巧，这些技巧对于跟踪那些难以察觉&lt;img src ="http://blog.csdn.net/caviler/aggbug/620592.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】Web 交互 - AJAX 不是什么新技术</title><link>http://blog.csdn.net/caviler/archive/2006/02/22/606158.aspx</link><pubDate>Wed, 22 Feb 2006 17:45:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2006/02/22/606158.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/606158.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2006/02/22/606158.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/606158.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=606158</trackback:ping><description>        所谓的AJAX(Asynchronous JavaScript + XML)只不过是对异步 JavaScript + XML 等技术的混合。

浏览器端

1、数据处理：在不用重新装载整个页面的前提下，
                          使用浏览器所支持的 JavaScript 语言异步的与服务器端进行交互，
                          从而对 XML 或其他格式的数据进行交换和处理，或者远程调用服务器端的方法。

2、用户界面：在不用重新装载整个页面的前提下，
                          使用浏览器所支持的 JavaScript 语言来操作 XHTML、CSS、DOM 等技术，
                          实现动态用户界面的显示与交互，尽量让用户有桌面应用程序的感觉。

服务器端

1、脚本生成：服务器提供完整的 HTML/Javascript 代码生成机制。
2、远程调用：服务器提供对浏览器端通过 Javascript 调用服务器端功能(例如Jav&lt;img src ="http://blog.csdn.net/caviler/aggbug/606158.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】界面 - 皮肤界面(自画窗口标题)</title><link>http://blog.csdn.net/caviler/archive/2005/04/27/364953.aspx</link><pubDate>Wed, 27 Apr 2005 12:07:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/04/27/364953.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/364953.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/04/27/364953.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/364953.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=364953</trackback:ping><description>    在皮肤界面中，最难的恐怕就是自画窗口标题了，网上虽然有各种各样的解决方法，但是都不是很完美，而商业皮肤界面程序包是需要花钱买的。
    没办法，只有自己摸索了，最后，去研究了一下 Windows 2000 的核心代码中关于窗口管理部分，终于算是比较满意的解决了这个问题。&lt;img src ="http://blog.csdn.net/caviler/aggbug/364953.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】ISAPI - 从 Window 2000 IIS 5.0 升级到 Windows 2003 IIS 6.0</title><link>http://blog.csdn.net/caviler/archive/2005/04/04/336028.aspx</link><pubDate>Mon, 04 Apr 2005 13:44:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/04/04/336028.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/336028.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/04/04/336028.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/336028.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=336028</trackback:ping><description>以前在Window 2000 IIS5.0下写了一个URL检测 + 重定向 + Session + 入侵检测 + 自动解压+ 自动解密的 ISAPI Filter ，用于数字图书馆项目，一直都很好使， 最近升级到 Widnows 2003 IIS6.0 后，发现　ISAPI Filter 根本运行不起来，后来查了又查，原来是文件的权限问题，IIS 6.0 ISAPI Filter 好象是在　Service 帐号下运行的(具体我也没去查过) ,将数据文件的读写权限给予Service 帐号后,ISAPI Filter 终于可以正常运行了，但是，在随后的测试中，我发现，数据解密结果不正确，郁闷啊，查吧............

经过日志跟踪和分析，终于发现问题所在，原来　IIS 6.0 和 IIS 5.0 发送给客户端的时候应答稍微有点不一样，IIS 5.0 是先单独发应一次答头 HttpFilterProc-&gt;OnSendData，

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Date: M&lt;img src ="http://blog.csdn.net/caviler/aggbug/336028.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】代码片段 - 日期时间</title><link>http://blog.csdn.net/caviler/archive/2005/02/25/301481.aspx</link><pubDate>Fri, 25 Feb 2005 12:06:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/02/25/301481.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/301481.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/02/25/301481.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/301481.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=301481</trackback:ping><description>本人写的一些日期时间转换函数：

// =============================================================================

//  文件名称:     TimeUtil.hpp

//  内容说明:     

//  

//  编写人:         IYFT

//  E-Mail:           IYFT@163.com

//  

//  创建日期:     2004年07月01日10:52:54

//  修改日期:     2004年09月13日15:08:35

// -----------------------------------------------------------------------------

//  

//  修改记录:

//  - 

//  - 

//  

// ============================================================&lt;img src ="http://blog.csdn.net/caviler/aggbug/301481.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】开源(OpenSource) - 全文检索 - Lucene - CLucene </title><link>http://blog.csdn.net/caviler/archive/2005/02/23/298751.aspx</link><pubDate>Wed, 23 Feb 2005 14:55:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/02/23/298751.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/298751.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/02/23/298751.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/298751.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=298751</trackback:ping><description>        传统的全文检索都是基于数据库的，SQL Server、Oracle、mysql 都提供全文检索，但这些比较大，不适合单机或小应用程序(Mysql4.0以上可以作为整合开发)，Mysql也不支持中文。
        Lucene是一个高性能、纯Java的全文检索引擎，而且免费、开源。Lucene几乎适合于任何需要全文检索的应用，尤其是跨平台的应用。Lucene的作者Doug Cutting是一个资深的全文检索专家，刚开始，Doug Cutting将Lucene发表在自己的主页上，2000年3月将其转移到Sourceforge，于2001年10捐献给Apache，作为Jakarta的一个子工程。
        CLucene是C++版的全文检索引擎,完全移植于Lucene，采用 STL 编写。
        编译了一下 C++ 版本的 Lucene - CLucene - a C++ search engine  http://sourceforge.net/projects/clucene/
在 MSVC6 下修改了一些编译选项后编译成功，测试了一下，好象不&lt;img src ="http://blog.csdn.net/caviler/aggbug/298751.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【链接】Microsoft - Visual Studio 2005 </title><link>http://blog.csdn.net/caviler/archive/2005/02/01/276859.aspx</link><pubDate>Tue, 01 Feb 2005 18:14:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/02/01/276859.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/276859.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/02/01/276859.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/276859.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=276859</trackback:ping><description>【链接】Microsoft - Visual Studio 2005&lt;img src ="http://blog.csdn.net/caviler/aggbug/276859.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】编程语言 - 工具 - 代码格式化(Format)/风格化(Style)</title><link>http://blog.csdn.net/caviler/archive/2005/02/01/276821.aspx</link><pubDate>Tue, 01 Feb 2005 17:38:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/02/01/276821.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/276821.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/02/01/276821.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/276821.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=276821</trackback:ping><description>        看源代码的时候免不了要格式化一下代码，Java 当然是用 Eclipse 了，但是 C/C++ 就一直没有一个合适好用的工具来格式化(Format)/风格化(Style)代码，虽然Visual Studio 6.0 - Visual Studio 2005都提供了代码格式化功能，但是，实在是 --- 太简单了，根本不够用！！！
        后来在网上搜索了一把，发现一个很不错的工具Artistic Style ，功能很强大，支持 C/C++/C# 和 Java，而且开源，目前最后版本是 1.17.0。此版本需要用 CVS 下载并编译，其中还是有些小 Bug, 估计是作者没空改，呵呵。


Artistic Style 1.17.0-dev 
A Free, Fast and Small Automatic Formatter
for C, C++, C#, and Java Source Codes 
Project Overview  http://astyle.sourceforge.net  
Sources, Binaries, Bug Tr&lt;img src ="http://blog.csdn.net/caviler/aggbug/276821.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>一无所知</dc:creator><title>【编程】编程语言(C++) - 工具 - 如何重置 Visual Assist X 试用时间</title><link>http://blog.csdn.net/caviler/archive/2005/01/27/270332.aspx</link><pubDate>Thu, 27 Jan 2005 11:33:00 GMT</pubDate><guid>http://blog.csdn.net/caviler/archive/2005/01/27/270332.aspx</guid><wfw:comment>http://blog.csdn.net/caviler/comments/270332.aspx</wfw:comment><comments>http://blog.csdn.net/caviler/archive/2005/01/27/270332.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.csdn.net/caviler/comments/commentRss/270332.aspx</wfw:commentRss><trackback:ping>http://tb.blog.csdn.net/TrackBack.aspx?PostId=270332</trackback:ping><description>Visual Assist X 是一个非常好的 Visual Studio 6.0 IDE 辅助工具, 但我一直没有找到注册码，当 Visual Assist X 过期后，有一种方法可以重置 Visual Assist X 的过期时间，供参考，步骤如下：
1、关闭 Visual Studio 6.0。
2、删除注册表中的 HKLM\Software\Licenses 键值。
3、删除 %TEMP% 中的 .tmp 文件。
4、在注册表中搜索关键字 "nLxxQ" ，会找到一个类似于下面所示的 COM 注册项，删除整个该项。
      HKCU\CLSID\{BC29421E-12B6-4630-A281-E18D215BC63E}

&lt;img src ="http://blog.csdn.net/caviler/aggbug/270332.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>