自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

转载 C27、硬件输入模型和局部输入状态:

一、  原始输入线程(系统初始化时建立):鼠标和键盘 à 设备驱动程序 à 系统硬件输入队列(System Hardware Input Queue,SHIQ)à 原始输入线程(Raw Input Thread, RIT)à VIQ à 线程的THREADINFO。 RIT如何分发:鼠标:RIT确定哪个窗口(有焦点),调用GetWindowThreadProcessId确定线程;

2010-01-06 16:03:00 707

转载 C26、窗口消息

u       一个进程至多建立拥有1万个不同类型的用户对象(User Object):图符、光标、窗口类、菜单、加速键表等。u       窗口和挂钩(hook)由线程拥有。u       线程(进程)结束,用户对象被OS删除。u       建立窗口的线程必需为这个窗口处理所有的消息。主消息循环使用GetMessage 或PeekMessage取出一个消息,检查hwnd是否为NUL

2010-01-05 20:38:00 761

转载 C25、未处理异常和C++异常

一、异常过滤器返回EXCEPTION_CONTINUE_SEARCH:用于告诉系统我们在这个except块中未处理这个异常,到前面一个except块相匹配的try块,并调用这个try块的异常处理。如果每个过滤器都这样返回,则是未处理异常,unhandled exception,将导致线程和进程终止。系统给出一个出错消息框,终止或调试程序。(如果在内核方式运行,出现蓝屏死机, balt)。二、防

2010-01-05 20:33:00 793

转载 C24、异常处理程序和软件异常

__try, __except(exception filter) 一、异常过滤器(exception filter)和异常处理程序一、异常过滤器中使用逗号(,)操作符。从左到右执行,返回最右边表达式的结果。二、异常处理程序,在try块中可以使用return, goto, continue, break等,不会产生速度和代码规模方面的不良影响(与结束处理程序不同)。三、过滤器(

2010-01-05 20:24:00 683

转载 C22、插入DLL和挂接API

将DLL插入到另一个进程的地址空间,对他做任何事。一、插入DLL:SetWindowLongPtr(hwnd, GWLP_WNDPROC, MySubclassProc);二、使用注册表来插入DLL:A.        注册表位置:HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Windows/AppI

2010-01-05 20:20:00 744

转载 C23、结束处理程序

__try; __finally; __leaveu       正常从try块结束后进入finally;__leave会跳出try块,执行finally(无系统开销);u       局部展开:如果try块过早退出(goto, longjump, continue, break, return等),强制转移到finally块执行(系统开销大!); u       全局展开(globa

2010-01-05 20:18:00 481

转载 C21、线程本地存储(TLS)

一、动态TLS:a)         DWORD TlsAlloc();u       该函数使系统对进程中的位标志进行扫描,找出一个FREE标志,并转换为INUSE,返回标志的索引。如果找不到FREE标志,返回TLS_OUT_OF_INDEXES(0XFFFFFFFF)。u       而且,如果这个索引位置已经分配了内存,会删除内存,并置0。b)        将值放入本线

2010-01-05 20:06:00 587

转载 C20、高级DLL

一、显式加载DLL模块:a)         HINSTANCE LoadLibrary(PCTSTR pszDllPathName);b)        HINSTANCE LoadLibraryEx(PCTSTR pszDllPathName,       //路径(包含文件全名)。HANDLE hFile;       // NULLDWORD dwFlags); /

2010-01-05 20:00:00 1262

翻译 C19、DLL

Windows三个重要的DLL:n         Kernel32.dll:管理内存、进程、线程n         User32.dll:执行用户界面(窗口创建和消息传送)n         GDI32.dll:画图和文本显示。特殊DLL:n         AdvAPI32.dll:安全、注册表、事件记录n         ComDlg32.dll:常用对话框n

2010-01-05 19:50:00 597

转载 C18、堆栈

我们以前最常用的方法。用于分配较小的数据块:链表和树。无分配粒度和页面边界的问题。缺点:速度慢,无法直接控制物理存储器的提交和回收。一、进程的默认堆栈:n         进程初始化时,系统在进程的地址空间创建。默认大小1MB。可以用/HEAP链接开关改变默认大小(DLL没有与其相关的堆栈!): /HEAP: reserve[,commit]n         老的16位函数L

2009-12-23 18:48:00 717

转载 C17、内存映射文件

一、使用目的:n         系统加载执行.exe 和DLL文件(节省页文件空间,快速启动);n         访问磁盘文件而不必进行I/O操作和缓存;n         进程间共享数据(进程间通讯最有效的方法)。 二、默认情况下,全局数据和静态数据不能被同一个.exe 或DLL文件的多个映像共享。但可以改变(但不鼓励使用)。改变的方法:n         每个.

2009-12-23 18:46:00 1441

转载 C16、线程的堆栈

按照默认,系统为线程保留一个堆栈空间区域(1MB),并将物理存储器(2页面)提交给这个已保留的区域。可以在链接程序时修改默认设定:/STACK: /reserve[, commit]。CRT函数会对堆栈做检查。我们在程序中可以使用结构化异常处理技术(try-except)对堆栈溢出作出补救。

2009-12-23 18:43:00 417

转载 C15、使用虚拟内存

       Windows提供3种进行内存管理的方法:n         虚拟内存:管理大型对象或结构数组。n         内存映射文件:管理大型数据流(通常来自文件)及多进程共享数据。n         内存堆栈:管理大量的小对象。管理虚拟内存的函数可以用来直接保留一个地址空间区域,提交物理存储器,设置保护属性。一、地址空间中保留及提交一个区域:PVOID Virt

2009-12-23 18:40:00 568

转载 C14、虚拟内存

 一、系统信息a)         函数(检索主机相关信息):VOID GetSystemInfo(LPSYSTEM_INFO psinf);b)        SYSTEM_INFO结构 成员说明:n         dwPageSize; // CPU页面大小,x86 = 4KB;Alpha、IA_64 = 8KBn         lpMinimumApplication

2009-12-23 18:38:00 639

转载 C13、Windows的内存结构

  一、进程的虚拟地址空间n         每个进程都被赋予虚拟地址空间。32位进程是4GB(0x00000000~0xFFFFFFFF),64位为16EB(0x0000000000000000~0xFFFFFFFFFFFFFFFF)。n         运行的线程只能访问它自己的进程的内存,属于其他进程的内存则隐藏,不能被访问。在Win2000,OS的内存也隐藏不能被访问,而Win

2009-12-23 18:24:00 619

转载 C12、纤程

目的:方便将UNIX服务器程序移植到Windows中(以转换UNIX多线程为Windows多线程,因为他们使用不同的算法结构),Windows程序应该避免使用纤程。纤程以用户(非内核)方式代码实现。 一、将现有的线程转换为纤程:PVOID ConvertThreadToFiber(PVOID pvParam); 该函数为纤程的执行环境分配内存(200 byte),(并初始化)其

2009-12-23 18:19:00 434

转载 C11、线程池的使用

       线程池由四个独立的部分组成:定时器,等待,I/O,非I/O。当进程初始化时,无开销。但是,一旦有线程池函数调用,就为进程创建某些组件。        多线程应用程序的困难,是面对两大问题:管理线程的创建和撤销,资源访问同步。线程池函数的功能:一、异步调用函数:a)         该方案是C/S应用程序的典型实现,经常处理异步I/O请求(高性能可伸缩应用程序的秘诀!)

2009-12-08 20:18:00 1762

转载 C9、线程与内核对象的同步

(内核对象机制,优点:适应性好,跨进程访问;缺点:速度慢)一、等待函数(使线程进入等待状态):a)         DWORD WaitForSingleObject(HANDLE, DWORD dwMilliseconds); //INFINITE返回值指明变为可调度状态的原因,所等待的对象变为已通知:WAIT_OBJECT_0;超时:WAIT_TIMEOUT;传入了无效句柄:WAI

2009-12-07 23:58:00 518

转载 C8、 用户方式的线程同步

(用户方式同步的优点:同步速度快;但是,锁函数缺点:单值,不能使线程进入等待状态;关键代码段:单进程中的线程实施同步,易死锁) 一、互锁函数(原子方式运行,速度快!):a)         LONG InterLockedExchangeAdd(PLONG plAdded, LONG lIncrement);//相当于*plAdded += lIncrement;b)     

2009-12-07 23:57:00 508

转载 C7、线程的调度、优先级、亲缘性

一、暂停线程的运行:a)         创建时使用CREATE_SUSPENDEDb)        DWORD SuspendThread(HANDLE hThread);二、恢复执行(唤醒):DWORD ResumeThread(HANDLE hThread);三、线程睡眠:VOID Sleep(DWORD dwMilliseconds);四、转换到其他线程:BOOL S

2009-12-07 23:55:00 661

转载 C6、线程

一、介绍:(与进程一样,由两部分组成:线程内核对象,地址空间(堆栈)),但线程的开销比线程小很多;能简化用户界面;充分利用CPU。 二、线程函数:a)         线程进入点函数:DWORD WINAPI ThreadFunc(PVOID, pvParam){   DWORD dwResult = 0 ;   …   return (dwResult);}

2009-12-07 23:54:00 504

转载 C5、作业

作业(组合一组进程的实体,沙盒?)(win98不支持)n         将进程放入作业,参见:void StartRestrictedProcess();n         获取当前作业中的一组进程ID,参见:void EnumProcessIdsInJob(HANDLE hjob);n         作业的通知信息:一、分配的CPU时间是否已到期:一旦分配的CPU时间用完,O

2009-12-07 23:52:00 832

转载 C4、进程

一、进程基址(进程的实例句柄):a)         HMODULE = HINSTANCEb)        默认基址:0x00400000,一般应>=。c)        可以改变加载基址,link中/BASE:addressd)        获取基址:HMODULE GetModuleHandle(PCTSTR pszModule); 如果in “NULL”,返回调用的

2009-12-07 23:50:00 423

转载 C3、内核对象

一、引用计数二、安全性:客户端一般传递NULL,为默认的安全属性。n         如果在WIN98上开发、运行良好,而在WIN2000出错,可以把安全属性改为:KEY_QUERY_VALUEn         如何区分内核对象还是GDI或用户对象?区别在于创建函数是否有安全属性。三、跨进程边界共享内核对象(方法)a)         (对象句柄的)继承性:n    

2009-12-07 23:48:00 420

转载 C1、对程序错误的处理

函数:DWORD GetLastError();       //返回32bit错误代码//转换成文本描述:DWORD FormatMessage(……);头:WinError.h调试:   1、Watch窗口:输入“@err,hr”;       2、Error Lookup定义自己的错误代码:VOID SetLastError(DWORD dwErrCode);

2009-12-07 23:46:00 425

翻译 使用Unicode

 /******************************************************************************//DealUnicode.cpp//使用Unicode字符集, 2009-11-26//Unicode,//DBCS 双字节字符集//////////////////////////////////////////////////

2009-11-26 19:53:00 810

翻译 学习ATL编程:源于MSDN

 PART III基本ATL COM 对象 一、应用IUnknown的两个方面:a)        应用IUnknown的方法,使用:CComObject, CComAggObject 或CComPolyObject。b)        管理参考计数和外部指针:CComObjectRoot, CComObjectRootEx。 二、其它对象:a)       

2009-11-25 01:59:00 812

翻译 学习ATL编程:源于MSDN

 PART IIIntroduce to COM一、        Interfaces,接口二、        IUnknown,所有接口的基类接口,管理参考计数和接口查询,定义三个方法:QueryInterface, AddRef, and Release三、        Reference Counting,参考计数四、        QueryInterface,

2009-11-25 01:56:00 747

翻译 学习ATL编程:源于MSDN

 PART I工程样例:  Polygon 一、  AppWizard 创建项目工程。文件说明:a)         StdAfx.h, cpp.    //包含有特殊的头文件,并有全局变量_Module的extern申明, extern CcomModule _Moduleb)        Polygonps.def        //为代理、存根DLL定义的模块文件

2009-11-25 01:52:00 718

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除