摘要:
hooks 说明书
hook是windows提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。
下面将介绍winndows hooks并且说明如何在windows 程序中使用它。
=========================关于hooks======================
使用hook 将会降低系统效率,因为它增......
摘要:
platform sdk: interprocess communications
monitoring system events
the following example uses a variety of thread-specific hook procedures to monitor the system for events affecting a thread. i......
CUJ:标准库:Allocator能做什么?
the standard librarian: what are allocators good for?
http://www.cuj.com/experts/1812/austern.htm?topic=experts 【程序编程相关:
迎接CDMA时代吧】
matt austern 【推荐阅读:
Windows程序设计(第五版)源代码重】
allocator是c++语言标准库中最神秘的部分之一.它们很少被显式使用,标准也没有明确出它们应该在什么时候被使用.今天的allocator与最初的stl建议非常不同,在此过程中还存在着另外两个设计--这两个都依赖于语言的一些特性,而直到最近才在很少的几个编译器上可用.对allocator的功能,标准似乎在一些方面追加了承诺,而在另外一些方面撤销了承诺. 【扩展信息:
c++学习心得--参数传递的注意】
--------------------------------------------------------------------------------
这篇专栏文章将讨论你能用allocator来做什么以及如何定义一个自己的版本.我只会讨论c++标准所定义的allocator:引入准标准时代的设计,或试图绕过有缺陷的编译器,只会增加混乱.
什么时候不使用allocator
c++标准中的allocator分成两块:一个通用需求集(描述于§ 20.1.5(表 32)),与叫std::allocator的class(描述于§20.4.1).如果一个class满足表32的需求,我们就称它为一个allocator.std::allocator类满足那些需求,因此它是一个allocator.它是标准程序库中的唯一一个预先定义allocator类.
每个 c++程序员都已经知道动态内存分配:写下new x来分配内存与创建一个x类型的新对象,写下delete p来销毁p所指的对象并归还其内存.你有理由认为allocator会使用new与delete--但它们没有.(c++标准将::operator new()描述为“allocation function”,但很奇怪,allocator并不是这样的.)
有关allocator的最重要的事实是它们只是为了一个目的:封装stl容器在内存管理上的低层细节.你不应该在自己的代码中直接调用allocator的成员函数,除非正在写一个自己的stl容器.你不应该试图使用allocator来实现operator new[];这不是allocator该做的. 如果你不确定是否需要使用allocator,那就不要用.
allocator是一个类,有着叫allocate()与deallocate()成员函数(相当于malloc与free).它还有用于维护所分配的内存的辅助函数与指示如何使用这些内存的typedef(指针或引用类型的名字).如果一个stl容器使用用户提供的allocator来分配它所需的所有内存(预定义的stl容器全都能这么做;他们都有一个模板参数,其默认值是std::allocator),你就能通过提供自己的allocator来控制它的内存管理.
这种柔性是有限制的:仍然由容器自己决定它将要申请多少内存以及如何使用它们.在容器申请更多的内存时,你能控制它调用那个低层函数,但是你不能通过使用allocator来让一个vector行动起来像一个deque一样.虽然如此,有时候,这个受限的柔性也很有用.比如,假设你有一个特殊的fast_allocator,能快速分配与释放内存(也许通过放弃线程安全性,或使用一个小的局部堆),你能通过写下std::list<t, fast_allocator<t> >而不是简单的std::list<t>来让标准的list使用它.
如果这看起来对你很陌生,那就对了.没有理由在常规代码中使用allocator的.
定义一个allocator
关于allocator的这一点你已经看到了:它们是模板.allocator,与容器一样,有value_type,而且allocator的value_type必须要匹配于使用它的容器的value_type.这有时会比较丑陋:map的value_type相当复杂,所以显式调用allocator的map看起来象这样的,std::map<k,v, fast_allocator<std::pair<const k, v> > >.(像往常一样,typedef会对此有帮助.)
以一个简单的例子开始.根据c++标准,std::allocator构建在::operator new()上.如果你正在使用一个自动化内存使用跟踪工具,让std::allocator更简单些会更方便.我们可以用malloc()代替::operator new(),而且我们也不考虑(在好的std::allocator实作中可以找到的)复杂的性能优化措施.我们将这个简单的allocator叫作malloc_allocator .
既然malloc_allocator的内存管理很简单,我们就能将重点集中在所有stl的allocator所共有的样板上.首先,一些类型:allocator是一个类模板,它的实例专为某个类型t分配内存.我们提供了一序列的typedef,以描述该如何使用此类型的对象:value_type指t本身,其它的则是有各种修饰字的指针与引用.
template <class t> class malloc_allocator
{
public:
typedef t value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
...
};
这些类型与stl容器中的很相似,这不是巧合:容器类常常直接从它的allocator提取这些类型.
为什么有这么多的typedef?你可能认为pointer是多余的:它就是value_type *....
下一页 摘要:
利用vb建立鼠标键盘操作回放
很多的教学软件或系统监视软件可以自动记录回放用户的输入文字或点击按钮等操作操作,这个功能的实现是使用
了windows的hook函数。本文介绍如何通过使用vb来实现鼠标键盘操作的纪录和回放。
windows提供api函数setwindowshookex来建立一个hook,通过这个函数可以将一个程序添加到hook链中监视windows
消息,函数语法为:
......