句柄 是 Windows 核心物件的不透明識別碼(數值),用於應用程式參考與操作核心物件(視窗、檔案、執行緒、筆刷、位圖等)。你可以把它想像成「物件的引用編號」,核心透過句柄表管理物件生命週期。
每個建立的句柄在核心物件的參考計數器上 +1。若建立後未釋放,計數器永不歸零,物件無法銷毀,導致句柄表耗盡(預設上限 16,711,680),最終造成程式崩潰或系統不穩。
_beginthreadex 回傳句柄,必須 CloseHandle;若用 _beginthread 則不需(也不能)關閉。CreateBitmap / SelectObject 選入新物件後,必須 SelectObject 選回舊物件,再 DeleteObject 刪除新物件,確保參考計數歸零。Windows 核心為每個句柄維護參考計數:
Create*、Open*、DuplicateHandle、SelectObject (選入) → 計數 +1。CloseHandle、DeleteObject、SelectObject (選出) → 計數 -1。開發者必須清楚每個 API 是否會改變計數,確保增減一一對應。
掌握句柄生命週期,是編寫穩健 Windows 原生程式的關鍵基礎。