摘要: 搭建 python 的 eclips环境后写了一个测试程序。结果出现这样的错误:SyntaxError: Non-ASCII character '\xbd' in file E:\workspace\makeUpdatafilesIndex\src\makeIndex.py on line 12, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details原因是它不能识别中文编码。要在第一行加入# -*- coding: GBK -*-Python中有两种字符串,分别是一 阅读全文
posted @ 2011-08-10 23:35 xyecho 阅读(381) 评论(0) 推荐(0) 编辑
摘要: Windows提供了3种进行内存管理的方法,它们是: • 虚拟内存,最适合用来管理大型对象或结构数组。 • 内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行的多个进程之间共享数据。 • 内存堆栈,最适合用来管理大量的小对象。在地址空间中保留一个区域通过调用VirtualAlloc函数,可以在进程的地址空间中保留一个区域: [代码]第一个参数pvAddress包含一个内存地址,用于设定想让系统将地址空间保留在什么地方。在大多数情况下,你为该参数传递NULL。它告诉VirtualAlloc,保存着一个空闲地址区域的记录的系统应该将区域保留在它认为合适的任何地方。系统可以 阅读全文
posted @ 2011-01-06 21:57 xyecho 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 系统信息许多操作系统的值是根据主机而定的,比如页面的大小,分配粒度的大小等。这些值决不应该用硬编码的形式放入你的源代码。相反,你始终都应该在进程初始化的时候检索这些值,并在你的源代码中使用检索到的值。GetSystemInfo函数将用于检索与主机相关的值[代码]SYSTEM_INFO数据结构的样子。[代码]与内存有关的成员函数(其它变可参看MSDN)dwPageSize 用于显示CPU的页面大小。在x86 CPU上,这个值是4096字节。在Alpha CPU 上,这个值是8192字节。在IA-64上,这个值是8192字节lpMinimumApplicationAddress用于给出每个进程的可 阅读全文
posted @ 2011-01-06 19:11 xyecho 阅读(649) 评论(0) 推荐(0) 编辑
摘要: 进程的虚拟地址空间每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,(这是个虚拟地址空间,不是物理地址空间)。32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。这使得一个指针能够拥有4 294 967 296个值中的一个值,它覆盖了一个进程的4GB虚拟空间的范围。对于64位进程来说,这个地址空间是16EB(1018字节),64位指针可以拥有从0x0000000000000000至0xFFFFFFFFFFFFFFFF之间的任何值。这使得一个指针可以拥有18 446 744073 709 551 616个值中的一个值,它覆盖了一个进程的1 阅读全文
posted @ 2011-01-06 17:09 xyecho 阅读(775) 评论(0) 推荐(3) 编辑
摘要: 在系统中,对象分两类:核心对象和用户对象。如进程对象,线程对象,文件映射对象等就是核心对象;而向窗口,菜单等都是用户对象。两者的差别是:用户对象的句柄是系统唯一的。一个进程完全可以对另外一个进程中的用户对象进行操作。比如两个进程间通信的方法之一就是发送消息。正是由于窗口是用户对象,所以句柄是系统唯一,通过FindWindow(),得到另外一个进程的窗口句柄,然后用SendMessage(),让hWnd的窗口过程来处理消息,实现了进程间的通信。因此,对于用户对象,可以直接把句柄拿来用就行了。核心对象需要考虑系统的稳定性,因此,核心对象句柄是进程相关的。在每一个进程中都有一个核心对象表,每一个对象 阅读全文
posted @ 2011-01-05 21:22 xyecho 阅读(932) 评论(0) 推荐(0) 编辑
摘要: 互斥对象(mutex)内核对象能够确保线程拥有对单个资源的互斥访问权。互斥对象包含一个使用数量,一个线程ID和一个递归计数器。互斥对象的行为特性与关键代码段相同,但是互斥对象属于内核对象,而关键代码段则属于用户方式对象。这意味着互斥对象的运行速度比关键代码段要慢。但是这也意味着不同进程中的多个线程能够访问单个互斥对象,并且这意味着线程在等待访问资源时可以设定一个超时值。 ID用于标识系统中的哪个线程当前拥有互斥对象,递归计数器用于指明该线程拥有互斥对 象的次数。作用:通常来说,它们用于保护由多个线程访问的内存块。如果多个线程要同时访问内存块,内存块中的数据就可能遭到破坏。互斥对象能够保证访问内 阅读全文
posted @ 2011-01-05 21:13 xyecho 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 信标内核对象用于对资源进行计数。它们与所有内核对象一样,包含一个使用数量,但是它们也包含另外两个带符号的3 2位值。一个是最大资源数量,用于标识信标能够控制的资源的最大数量。一个是当前资源数量,用于标识当前可以使用的资源的数量。(FangSH注:有些书称之为信息量内核对象)为了正确地说明这个问题,让我们来看一看应用程序是如何使用信标的。比如说,我正在开发一个服务器进程,在这个进程中,我已经分配了一个能够用来存放客户机请求的缓冲区。我对缓冲区的大小进行了硬编码,这样它每次最多能够存放5个客户机请求。如果5个请求尚未处理完毕时,一个新客户机试图与服务器进行联系,那么这个新客户机的请求就会被拒绝,并 阅读全文
posted @ 2011-01-05 20:48 xyecho 阅读(764) 评论(0) 推荐(0) 编辑
摘要: 等待定时器是在某个时间或按规定的间隔时间,发出自己的信号通知的内核对象。它们通常用来在某个时间执行某个操作。(程序可以定时地做一些工作,而不需要人参与进去。比如每天定时地升级病毒库,定时地下载电影,定时地更新游戏里的人物。要想实现这些功能,就可以使用定时器的API函数CreateWaitableTimer和SetWaitableTimer来实现了,这对API函数创建的时钟是比较精确的,可以达到100倍的10亿分之一秒。)若要创建等待定时器,只需要调用CreateWaitableTimer函数: [代码]与事件的情况一样,fManualReset参数用于指明人工重置的定时器或自动重置的定时器。当 阅读全文
posted @ 2011-01-05 20:36 xyecho 阅读(713) 评论(0) 推荐(0) 编辑
摘要: 在所有的内核对象中,事件内核对象是个最基本的对象。它们包含一个使用计数(与所有内核对象一样),一个用于指明该事件是个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。事件能够通知一个操作已经完成。有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。当一个线程执行初始化操作,然后通知另一个线程执行剩余的操作时,事件使用得最多。事件初始化为未通知状态,然后,当该线程完成它的初始化操作 阅读全文
posted @ 2011-01-05 17:37 xyecho 阅读(663) 评论(0) 推荐(0) 编辑
摘要: 对于有些内核对象来说,成功地调用WaitForSingleObject和WaitForMultipleObjects,实际上会改变对象的状态。成功地调用是指函数发现对象已经得到通知并且返回一个相对于WA I T _O BJECT_ 0的值。如果函数返回WAIT_TIMEOUT或WAIT_FAILED,那么调用就没有成功。如果函数调用没有成功,对象的状态就不可能改变。当一个对象的状态改变时,我称之为成功等待的副作用。例如,有一个线程正在等待自动清除事件对象。当事件对象变为已通知状态时,函数就会发现这个情况,并将WAIT_OBJECT_0返回给调用线程。但是就在函数返回之前,该事件将被置为未通知状 阅读全文
posted @ 2011-01-05 17:11 xyecho 阅读(471) 评论(0) 推荐(0) 编辑