.NET Framework 3.0 是由 Windows 编程模型演变而来。它建立于 .NET Framework 2.0 的基础之上并加以扩展,目的是支持现代应用程序的构建。为此,该 3.0 版本采用了大量的最新技术,可以解决当今应用程序开发中的种种难题。通过在公共基础上建立这种多样性,Microsoft 致力于使软件的整体效果大于各个部分之和,从而让开发人员以更加一致的方式使用 .NET Framework 3.0 的不同部分来构建应用程序。阅读全文>
发表于 @ 2006年09月21日 10:27:00|评论(loading...)|收藏
【编程】工具 - Inside CRT: Debug Heap Management(转帖)阅读全文>
发表于 @ 2006年08月16日 14:46:00|评论(loading...)|收藏
今天在改进文件监视程序时写的框架代码,监视文件修改(采用完成端口和ReadDirectoryChangesW同时在一个线程中监视多个目录,并且能够判断文件是否完全复制完毕)阅读全文>
发表于 @ 2006年06月12日 15:46:00|评论(loading...)|收藏
如果在程序中打开最高级别的编译警告选项,并且在适当的地方加入如下语句
#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&); // 拷贝构造函数(消除 C4511 编译警告)
Class1& operato阅读全文>
发表于 @ 2006年05月08日 16:18:00|评论(loading...)|收藏
今天在调试程序时候发现某个线程中的 rand() 随机函数每次运行都返回同一个数据,检查了程序,在程序中也调用了 srand(GetTicketCount()) 来初始化随机数生成器,那为什么每次运行结果还一样呢???
后来发现,这个问题和多线程有关,跟踪 srand 和 rand 的函数内部后发现,其实 srand 和 rand 内部是使用了TlsGetValue等函数来存储随机数种子了,也就是说,这个随机数种子对每个线程都需要初始化一次 srand,而以前的代码是在主线程中初始化了一次,当然每次的结果都一样了。
void __cdecl srand (
unsigned int seed
)
{
#ifdef _MT
_getptd()->_holdrand = (unsigned long)seed;
#else /* _MT */
holdrand = (long)seed;
#endif /* _MT */
}
_ptiddata __cdecl _getp阅读全文>
发表于 @ 2006年04月05日 17:22:00|评论(loading...)|收藏
今天在用优化代码时发现有几个程序在 DevPartner Performance Analysis 中始终没有源代码分析结果。
开始还以为是 DevPartner Performance Analysis 设置问题,弄了半天,后来经过仔细比较,原来是程序中包含了一个用于优化程序大小和速度的头文件, 而这个头文件中又包含了下列语句
#pragma comment(linker,"/merge:.text=.data")
就是加上这个合并段后优化导致 DevPartner Performance Analysis 认为程序没有源代码,郁闷郁闷!把这句话注释掉后 DevPartner Performance Analysis 就分析正常了。阅读全文>
发表于 @ 2006年03月10日 18:50:00|评论(loading...)|收藏
解开 Windows 下的临界区中的代码死锁
Matt Pietrek和 Russ Osterlund
本文假定您熟悉 Win32、C++ 和多线程处理。
下载本文的代码:CriticalSections.exe (415KB)
摘要
临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。 本文深入研究临界区的原理,以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序,可以显示所有临界区及其当前状态。
在我们许多年的编程实践中,对于 Win32® 临界区没有受到非常多的“under the hood”关注而感到非常奇怪。当然,您可能了解有关临界区初始化与使用的基础知识,但您是否曾经花费时间来深入研究 WINNT.H 中所定义的 CRITICAL_SECTION 结构呢?在这一结构中有一些非常有意义的好东西被长期忽略。我们将对此进行补充,并向您介绍一些很有意义的技巧,这些技巧对于跟踪那些难以察觉阅读全文>
发表于 @ 2006年03月10日 10:54:00|评论(loading...)|收藏
所谓的AJAX(Asynchronous JavaScript + XML)只不过是对异步 JavaScript + XML 等技术的混合。
浏览器端
1、数据处理:在不用重新装载整个页面的前提下,
使用浏览器所支持的 JavaScript 语言异步的与服务器端进行交互,
从而对 XML 或其他格式的数据进行交换和处理,或者远程调用服务器端的方法。
2、用户界面:在不用重新装载整个页面的前提下,
使用浏览器所支持的 JavaScript 语言来操作 XHTML、CSS、DOM 等技术,
实现动态用户界面的显示与交互,尽量让用户有桌面应用程序的感觉。
服务器端
1、脚本生成:服务器提供完整的 HTML/Javascript 代码生成机制。
2、远程调用:服务器提供对浏览器端通过 Javascript 调用服务器端功能(例如Jav阅读全文>
发表于 @ 2006年02月22日 17:45:00|评论(loading...)|收藏
在皮肤界面中,最难的恐怕就是自画窗口标题了,网上虽然有各种各样的解决方法,但是都不是很完美,而商业皮肤界面程序包是需要花钱买的。
没办法,只有自己摸索了,最后,去研究了一下 Windows 2000 的核心代码中关于窗口管理部分,终于算是比较满意的解决了这个问题。阅读全文>
发表于 @ 2005年04月27日 12:07:00|评论(loading...)|收藏
以前在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->OnSendData,
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
X-Powered-By: ASP.NET
Date: M阅读全文>
发表于 @ 2005年04月04日 13:44:00|评论(loading...)|收藏