[問題] CLOSE_HANDLE 為何會有作用?

看板C_and_CPP作者 (pass the exam)時間15年前 (2009/08/04 09:24), 編輯推噓4(408)
留言12則, 2人參與, 最新討論串1/1
Win32的問題 HBITMAP 使用完後要CloseHandle CloseHandle的意義是把handle裡面的count - 1 等 count == 0 的時候才把物件刪掉,這樣沒錯吧? 可是我看 HBITMAP卻是被定義成 void* 請問對一個void*要怎麼刪他的count? 怎麼知道傳進來的是什麼樣的type? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.66.196

08/05 21:37, , 1F
不管是那一種handle,把它看成故定大小的指標就好了
08/05 21:37, 1F

08/05 21:45, , 2F
#define DECLARE_HANDLE(name)
08/05 21:45, 2F

08/05 21:46, , 3F
struct name##__ { int unused; }; typedef struct name##
08/05 21:46, 3F

08/05 21:46, , 4F
裡面的unused 就是你說的類似count的東西吧
08/05 21:46, 4F

08/05 21:47, , 5F
如果是這樣 認何一種handle裡面的count型態都是int
08/05 21:47, 5F

08/05 21:48, , 6F
可能因為這樣,closehandle不需要知道它的型態吧
08/05 21:48, 6F

08/06 01:07, , 7F
那個物件是由系統維護,count 也是
08/06 01:07, 7F

08/06 01:07, , 8F
CloseHandle 的時候會要求系統關閉這個 handle 所代表的
08/06 01:07, 8F

08/06 01:08, , 9F
物件,而系統會查詢 handle table 找出該 handle 代表的
08/06 01:08, 9F

08/06 01:09, , 10F
物件以及其 reference count 再視情況決定是否釋放
08/06 01:09, 10F

08/06 01:12, , 11F
所以那個 count 和程式碼中的 HBITMAP 或 void* 型態沒有
08/06 01:12, 11F

08/06 01:13, , 12F
關係
08/06 01:13, 12F
文章代碼(AID): #1ATuspYa (C_and_CPP)