計算機上正在執行的控制代碼 執行緒 程序分別是什麼意思?

2022-05-01 17:06:11 字數 1857 閱讀 4146

關於程序和執行緒以及控制代碼 - 吉行天下, 力挽狂瀾 - it部落格

所謂控制代碼實際上是乙個資料,是乙個long (整長型)的資料。

控制代碼是wondows用來標識被應用程式所建立或使用的物件的唯一整數,windows使用各種各樣的控制代碼標識諸如應用程式例項,視窗,控制,位圖,gdi物件等等。windows控制代碼有點象c語言中的檔案控制代碼。

從上面的定義中的我們可以看到,控制代碼是乙個識別符號,是拿來標識物件或者專案的,它就象我們的姓名一樣,每個人都會有乙個,不同的人的姓名不一樣,但是,也可能有乙個名字和你一樣的人。從資料型別上來看它只是乙個16位的無符號整數。應用程式幾乎總是通過呼叫乙個windows函式來獲得乙個控制代碼,之後其他的windows函式就可以使用該控制代碼,以引用相應的物件。

如果想更透徹一點地認識控制代碼,我可以告訴大家,控制代碼是一種指向指標的指標。我們知道,所謂指標是一種記憶體位址。應用程式啟動後,組成這個程式的各物件是住留在記憶體的。如果簡單地理解,似乎我們只要獲知這個記憶體的首位址,那麼就可以隨時用這個位址訪問物件。但是,如果您真的這樣認為,那麼您就大錯特錯了。我們知道,windows是乙個以虛擬記憶體為基礎的作業系統。在這種系統環境下,windows記憶體管理器經常在記憶體中來回移動物件,依此來滿足各種應用程式的記憶體需要。物件被移動意味著它的位址變化了。如果位址總是如此變化,我們該到**去找該物件呢?

為了解決這個問題,windows作業系統為各應用程式騰出一些內儲存位址,用來專門登記各應用物件在記憶體中的位址變化,而這個位址(儲存單元的位置)本身是不變的。windows記憶體管理器在移動物件在記憶體中的位置後,把物件新的位址告知這個控制代碼位址來儲存。這樣我們只需記住這個控制代碼位址就可以間接地知道物件具體在記憶體中的哪個位置。這個位址是在物件裝載(load)時由系統分配給的,當系統解除安裝時(unload)又釋放給系統。

控制代碼位址(穩定)→記載著物件在記憶體中的位址————→物件在記憶體中的位址(不穩定)→實際物件

本質:windows程式中並不是用實體地址來標識乙個記憶體塊,檔案,任務或動態裝入模組的,相反的,windows api給這些專案分配確定的控制代碼,並將控制代碼返回給應用程式,然後通過控制代碼來進行操作。

但是必須注意的是程式每次從新啟動,系統不能保證分配給這個程式的控制代碼還是原來的那個控制代碼,而且絕大多數情況的確不一樣的。假如我們把進入電影院看電影看成是乙個應用程式的啟動執行,那麼系統給應用程式分配的控制代碼總是不一樣,這和每次電影院售給我們的門票總是不同的乙個座位是一樣的道理。

執行緒是指程式的乙個指令執行序列,win32 平台支援多執行緒程式,允許程式中存在多個執行緒。 在單 cpu 系統中,系統把 cpu 的時間片按照排程演算法分配給各個執行緒,因此各執行緒實際上是分時執行的,在多 cpu 的 windows nt 系統中, 同乙個程式的不同執行緒可以被分配到不同的 cpu 上去執行。由於乙個程式的各執行緒是在相同的位址空間執行的,因此設及到了如何共享記憶體, 如何通訊等問題,這樣便需要處理各執行緒之間的同步問題,這是多執行緒程式設計中的乙個難點。

執行緒,也被稱為輕量程序(lightweight processes)。電腦科學術語,指執行中的程式的排程單位。

執行緒是程序中的實體,乙個程序可以擁有多個執行緒,乙個執行緒必須有乙個父程序。執行緒不擁有系統資源,只有執行必須的一些資料結構;它與父程序的其它執行緒共享該程序所擁有的全部資源。執行緒可以建立和撤消執行緒,從而實現程式的併發執行。一般,執行緒具有就緒、阻塞和執行三種基本狀態。

在多**處理器的系統裡,不同執行緒可以同時在不同的**處理器上執行,甚至當它們屬於同乙個程序時也是如此。大多數支援多處理器的作業系統都提供程式設計介面來讓程序可以控制自己的執行緒與各處理器之間的關聯度(affinity)。

程序是程式在乙個資料集合上執行的過程(注:乙個程式有可能同時屬於

多個程序),它是作業系統進行資源分配和排程的乙個獨立單位,程序可以簡單的分為系統程序(包括一般

windows程式和服務程序)和使用者程序

終止正在執行的執行緒

很多人都說使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。下面我們來看具體的操作步驟。首先定義乙個 停止 訊號變數 view plaincopy to clipboardp...

gdb除錯正在執行的程序

有時會遇到一種很特殊的除錯需求,對當前正在執行的其它程序進行除錯 正是我今天遇到的情形 這種情況有可能發生在那些無法直接在偵錯程式中執行的程序身上,例如有的程序 只能在系統啟動時執行。另外如果需要對程序產生的子程序進行除錯的話,也只能採用這種方式。gdb可以對正在執行的程式進行排程,它允許開發人員中...

Android殺死正在執行的程序

記得剛開始學習時有乙個killbackgroundprocess packagename 的方法 通過這種方法先獲取到執行程序包名,然後 actmanager.killbackgroundprocesses packagename 殺死他們 殺死後台程序,需要許可權 kill background ...