控制代碼與ID的區別

2021-04-20 06:04:48 字數 1795 閱讀 1873

控制代碼和id的區別(**) (2007-01-24 21:51:31)

分類:滄海拾貝

在windows程式設計中,控制代碼是無法精確定義的術語。隨便找乙個高手,讓他給你講講控制代碼是什麼,恐怕他都很難給你乙個具體的定義來。

在windows程式設計中,控制代碼無所不在,視窗有視窗的控制代碼hwnd,執行緒和程序也有控制代碼handle,甚至有人把套接字也稱為控制代碼(我就是這樣的)。

控制代碼在英文中是handle,作為動詞講是處理的意思。簡而言之,控制代碼是處理物件的乙個介面,對於程式中所涉及的物件,你可以通過控制代碼去操作他。你不應該試圖去回答控制代碼是什麼,而應該從務虛的角度去理解他,知道他幹什麼即可。

有人說,因為handle的定義是void *,因此他是乙個指標。有些熟悉核心的人說這是乙個索引。這些說法都是不準確的。需要注意的是,微軟並沒有精確定義控制代碼的含義,也許在某個特殊的作業系統中,他使用了一種內部含義,但是在其他版本中,就不保證這樣了。任何對控制代碼的內在假設都可能導致災難性的後果。

api是介面,控制代碼是介面,兩者有什麼區別?api是乙個通用的函式族,他處理所有的物件,而控制代碼是和某個具體物件相關聯的資料結構。只有借助控制代碼,api才知道處理哪個物件。

有些物件有id。控制代碼表示特殊的物件,id也表示某個物件,為什麼要兩個東西來表示?

首先,控制代碼不能唯一表示物件。乙個物件可以有多個控制代碼。例如:假設我們用createprocess建立乙個程序,該程序的第乙個執行緒的控制代碼會返回給呼叫createprocess的程序。同時,在新建立的程序中,該執行緒也會有乙個控制代碼。這樣,這個執行緒就有兩個控制代碼。我們也可以用duplicatehandle複製乙個控制代碼,這個控制代碼和原來控制代碼是不一樣的,但是他們都表示同乙個物件。而每個有id的物件,在系統範圍內,id肯定是唯一的。

其次,控制代碼所能實現的功能id不能實現。畢竟id只是乙個數字,他不能記錄很多資訊。而控制代碼可能在其內部結構中記錄了很多資訊(如許可權、有無訊號等)。

總之,如果試**釋他到底是什麼,學習控制代碼就會誤入歧途。從虛的角度去理解,對於新手是難一點,但是這也許是唯一正確的辦法。

另有一種比較形象的說法:

什麼是「控制代碼」(handle),handle的本意是把柄,把手的意思。是你與作業系統打交道的東東。舉個通俗的例子,比如你考上了大學,入學後,學校(作業系統)會給你乙個學生證號。注意,這個號碼是學校指定的,你無法自選。有了這個號碼(學生證,假設一證多用)享受學校提供的服務:如你就可以去圖書館借書,去食堂吃飯,去教室上課等等。但你不能到食堂裡買啤酒,因為學校不允許這種服務。而在計算機中系統提供的服務就是api呼叫,你有了handle,就可以理直氣壯地向系統提出呼叫api的服務。而指標的權力就大多了,有了指標你可以到處去喝酒,打架,學校(作業系統)管不著,所以控制代碼和指標的區別在於控制代碼指標呼叫系統提供的服務。而控制代碼雖然是乙個能相互區別的號碼,但與我們普通的id號又有區別,普通的id號是可以由程式設計師自己定義的,而控制代碼不行,它是物件生成是系統指定的,是為了區別系統中存在的各個物件,這個控制代碼不是由程式設計師符給的。

控制代碼 1。控制代碼,是整個windows程式設計的基礎,乙個控制代碼是指使用的乙個唯一的整數值,是指乙個四位元組長的數值,用於標誌應用程式中的不同物件和同類物件中的不同的例項,諸如,乙個視窗,按鈕,圖示,滾動條,輸出裝置,控制項或者檔案等。應用程式能夠通過控制代碼訪問相應的物件的資訊。

2。控制代碼不是乙個指標,程式不能利用它控制代碼來直接閱讀檔案中的資訊。如果控制代碼不用在i/o檔案中,它是毫無用處的。

3。控制代碼是windows用來標誌應用程式中建立的或是使用的唯一整數,windows使用了大量的控制代碼來來標誌很多物件。

說明:例項——在windows環境下,不但可以執行多個應用程式,還可以執行多個應用程式的多份拷貝,每個拷貝叫做乙個例項,並且有不同的例項控制代碼。乙個例項控制代碼是windows可以單獨執行的副本,是唯一可以標誌此例項的整數

控制代碼與程序ID的區別

1 關於控制代碼 控制代碼是wondows用來標識被應用程式所建立或使用的物件的唯一整數,windows使用各種各樣的控制代碼標識諸如應用程式例項,視窗,控制,位圖,gdi物件等等。windows控制代碼有點象c語言中的檔案控制代碼。控制代碼是乙個識別符號,是拿來標識物件或者專案的,它就象我們的姓名...

執行緒控制代碼和執行緒ID的區別

createthread api 用於建立執行緒。api 返回同時執行緒控制代碼,並通過引數得到執行緒識別符號 id 執行緒控制代碼有完全訪問權建立執行緒物件。執行執行緒時執行緒 id 唯一標識執行緒在系統級別。id是在windows系統範圍內唯一標示thread的。handle是用來操作threa...

指標與控制代碼的區別

指標與控制代碼的區別 1 什麼是控制代碼?控制代碼在windows程式設計中是乙個很重要的概念,在很多程式中都扮演者重要的角色。在windows環境中,控制代碼是用來標識專案的,這些專案包括 模組,任務,例項,檔案,記憶體塊,選單,控制,字型,資源 包括圖示,游標,字串等 gdi物件 包括位圖,畫刷...