Window核心物件

2021-06-18 19:01:03 字數 2289 閱讀 8967

windows的核心物件大致有以下幾種:

1.訪問令牌(access token)物件

2.事件物件

3.檔案物件

4.檔案對映物件

5.i/o埠物件

6.作業物件

7.郵件槽(mailslot)物件

8.互斥量(mutex)物件

9.管道(pipe)物件

10.程序物件

11.訊號量(semaphore)物件

12.執行緒物件

13.可等待的計時器物件

14.執行緒池工廠(thread pool worker factory)物件

每個核心物件都只是乙個記憶體塊,它由作業系統核心分配,並只能有作業系統核心訪問。

每個核心物件都包含乙個使用計數(usage count)。初次建立乙個物件的時候,其使用計數為1。另乙個程序獲得對現有物件的訪問後,使用計數會遞增。程序終止執行後,作業系統核心將自動遞減此程序仍然開啟的所有核心物件的使用計數。如果核心物件的使用計數為0時,作業系統核心物件會自動銷毀該物件。

核心物件可以用乙個安全操作符(security descriptor, sd)來保護。安全描述符描述了誰(通常是物件的建立者)擁有物件;哪些使用者被容許訪問或使用該物件;哪些組和使用者被拒絕訪問該物件。安全描述符通常在編寫伺服器應用程式的時候使用。

handle createthread(

lpsecurity_attributeslpsa

,  // 安全描述,通常設為null

dwordcbstack

lpthread_start_routinelpstartaddr

lpvoidlpvthreadparam

dwordfdwcreate

lpdwordlpidthread

);

安全描述通常設為null,表明使用預設的安全性

判斷乙個物件是否是乙個核心物件還是乙個使用者物件或gdi物件,主要看建立這個物件的函式。有安全描述的就是核心物件,反之就不是。

如:hbitmap createbitmap(

intnwidth

,// bitmap width, in pixels

intnheight

,// bitmap height, in pixels

uintcplanes

,// number of color planes

uintcbitsperpel

,// number of bits to identify color

const void*lpvbits

// color data array

);

建立核心物件一定要檢查它的返回值

通常它的返回值會是null或者invalid_handle_value ,要主要檢視msdn進行區別

使用完核心物件時要注意關閉該核心物件

bool closehandle( 

handlehobject

);

一旦呼叫了closehandle,我們的程序就不能再訪問該核心物件;但是,如果該物件的使用計數還沒有遞減為0,它就不會被銷毀。這說明還有其他的程序在使用該核心物件。

當忘記呼叫closehandle,會發生物件洩露情況嗎?

不一定,在應用程式執行時,它可能會洩露核心物件;當程序終止執行,系統會保證一切都會被正常清除。

當程序終止時,對於核心物件,操作會做以下操作:

程序終止時,系統自動掃瞄該程序的控制代碼表。如果這個表中有任何有效的標記項(即程序終止前沒有關閉的物件),作業系統會為我們關閉這些物件控制代碼。只要這些物件中有乙個使用計數遞減到0,核心就會銷毀物件。

不光如此,這適合於所有的核心物件、資源(包括gdi物件在內)以及記憶體塊。程序終止執行時,系統會保證我們的程序不會留下任何東西。

Window學習 核心物件 一

windows的核心物件所擁有者是作業系統,而非程序。程序被銷毀的時候,核心物件不一定會銷毀。所以核心物件的生命週期可能長於建立它的那個程序。作業系統核心知道當前有多少個程序正在使用乙個特定的核心物件,因為每個物件都包含乙個使用計數。使用計數是所有核心物件型別都有的乙個資料成員。這個還挺重要的,看到...

Window物件方法

window 物件表示瀏覽器中開啟的視窗。注意 要使用 cleartimeout 方法,在建立執行定時操作時要使用全域性變數。該方法的引數必須是由 settimeout 返回的 id 值。注意 setinterval 方法會不停地呼叫函式,直到 clearinterval 被呼叫或視窗被關閉。由該方...

Flink核心概念之window

計數視窗 1 windowall就是把所有資料弄到乙個slot處理,並行度始終為1 2 keyby會把資料分到不同的slot,keyby.window可以設定並行度 package com.fouth sink import org.apache.flink.streaming.api.functi...