您的位置:首页 > 其它

windows资源管理(内核对象/GDI对象/user对象)

2011-07-04 20:03 483 查看
  在使用c++进行windows编程时,程序员除了管理使用new/malloc动态在堆上分配出来的内存外,还需要对windows的内核对象、GDI对象和user对象进行管理,这些对象使用句柄来标识,通过操作这些句柄就使用不同的资源对象。和堆内存一样,程序员也需要管理这些对象资源,以免造成系统资源泄漏。

  句柄(HANDLE)是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。

【内核对象、GDI对象和user对象之间的区别】

  内核对象是不属于进程的,是属于windows内核的。进程只有一个内核对象句柄表,用来存放所有的内核对象句柄。所以,多个进程可以同时使用一个内核对象 -- 只要有handle即可。

  对于GDI对象和user对象,他们是一个进程内部拥有的东西,不会被多个进程共有。GDI对象与绘图相关,而user与交互相关。

------

  内核对象的直接拥有者是操作系统内核,所有进程共享这些内核对象,因此要有一种机制保证内核对象的正确构建、销毁,Windows采用引用计数的技术;内核对象维护着一个引用计数成员。一个进程创建了一个内核对象,对象的引用计数为1,如果该对象又被另外的进程共享,每多一个进程,引用计数会加1,当一个进程调用CloseHandle函数后,引用计数会减1,如果引用计数变为0,操作系统会销毁该内核对象。引用计数实现上跟COM计数的引用计数类似。内核对象使用完之后,要调用CloseHandle。这个函数的作用就是将该内核对象的引用计数 - 1,当这个计数为0的时候,该内核对象会变成signal状态,并被操作系统销毁。

  GDI对象和user对象的销毁不需用调用CloseHandle。每一个GDI对象和user对象的销毁都有其对应的Destroy或Delete方法。

------

## 内核对象 ##

核心对象

产生方法

事件对象

HANDLE CreateEvent();

文件对象

HANDLE CreateFile();

文件映射对象

HANDLE CreateFileMapping();

I/O完成对象

HANDLE CreateIoCompletionPort();

作业对象

HANDLE CreateJobObject();

信箱对象

HANDLE CreateMailslot();

互斥对象

HANDLE CreateMutex();

管道对象

BOOL CreatePipe();

进程对象

BOOL CreateProcess();

信号量对象

HANDLE CreateSemaphore();

线程对象

HANDLE CreateThread();

等待计时器对象

HANDLE CreateWaitableTimer();

## GDI对象 ##

GDI对象

产生方法

销毁方法

位图(HBITMAP)

CreateBitmap,CreateBitmapIndirect,

CreateCompatibleBitmap,CreateDIBitmap,

CreateDIBSection,CreateDiscardableBitmap

DeleteObject

画刷(HBRUSH)

CreateBrushIndirect,CreateDIBPatternBrush,

CreateDIBPatternBrushPt,CreateHatchBrush,

CreatePatternBrush,CreateSolidBrush

DeleteObject

设备上下文(HDC)

CreateDC

DeleteDC,ReleaseDC

字体(HFONT)

CreateFont,CreateFontIndirect

DeleteObject

内存DC(HDC)

CreateCompatibleDC

DeleteDC

调色板(HPALETTE)

CreatePalette

DeleteObject

画笔(HPEN)

CreatePen,CreatePenIndirect

DeleteObject

区域(HRGN)

CombineRgn,CreateEllipticRgn,

CreateEllipticRgnIndirect,CreatePolygonRgn,

CreatePolyPolygonRgn,CreateRectRgn,

CreateRectRgnIndirect,CreateRoundRectRgn,

DeleteObject

## USER对象 ##

user对象

产生方法

销毁方法

快捷键(HACCEL)

CreateAcceleratorTable

DestroyAcceleratorTable

Caret

CreateCaret

DestoryCaret

光标(HCURSOR)

CreateCursor,LoadCursor,LoadImage

DestoryCursor

钩子(HHOOK)

SetWindowsHookEx

UnhookWindowsHookEx

图标(HICON)

CreateIconIndirect,LoadIcon,LoadImage

DestroyIcon

菜单(HMENU)

CreateMenu,CreatePopupMenu

LoadMenu,LoadMenuIndirect

DeleteMenu

窗体(HWND)

CreateWindow,CreateWindowEx,

CreateDialogParam,CreateMDIWindow

DestroyWindow

HDWP

BeginDeferWindowPos

EndDeferWindowPos

-- 关于程序对资源的使用情况,可以从任务管理器上看到。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: