天天看點

[學習日記]程序、線程和子產品

    1.Proccss的概念

    用最簡短的話來說,程序就是目前運作的應用程式。運作的應用程式包括exe,dll這兩種檔案。檔案和程序的差别在與,檔案是儲存在磁盤上的,是靜止的,計算機不會去調用檔案,而程序是非靜止的,正是由于着個原因,是以計算機每調用一個程序就需要一定的資源。這些資源包括記憶體,虛拟頁面,句柄,gdi……

    在.net中我門可以用Process 類,(他位于System.Diagnostics空間中)提供對正在計算機上運作的程序的通路。使用 Process類,可以擷取目前運作的程序的清單,或者啟動新的程序。Process 類用于通路系統程序。初始化 Process類後,可使用該類來擷取有關目前運作的程序的資訊。此類資訊包括線程集、加載的子產品(.dll 和 .exe 檔案)和性能資訊(如程序目前使用的記憶體量)。

    系統程序在系統上由其程序辨別符唯一辨別。與許多 Windows 資源一樣,程序也由其句柄辨別,而句柄在計算機上可能不唯一。句柄是表示資源辨別符的一般術語。即使程序已退出,作業系統仍保持程序句柄,該句柄通過 Process 元件的 Handle 屬性通路。是以,可以擷取程序的管理資訊,如 ExitCode(通常,或者為零表示成功,或者為非零錯誤代碼)和 ExitTime。句柄是非常有價值的資源。

    2. thread的概念

    程序由一個或多個線程組成。換句話說線程是将程序分成了多個小的部分.每個線程都有優先級,在較高優先級的線程完成任務的時候,較低優先級的線程可能會被迫等待。在多處理器計算機上,将多個線程移到不同的處理器上,進而對 CPU 負荷進行平衡。每個程序啟動時都具有一個線程,該線程稱為主線程。任何線程都可建立其他線程。程序中的所有線程共享該程序的位址空間。

    在.net中可以用System.Diagnostics的ProcessThread類來與程序獲相關的線程資訊.用System.Threading的Thread類來建立新線程.請注意Thread類不可以用來通路其他程序的線程,他隻可以用來建立一個線程而已,一定要記住這點。如果你還想對線程進行更多的操作,可以用System.Diagnostics.ProcessThread類中傳回的id,通過它作為api函數的參數來操作線程。

    3. module的概念

    子產品指的是可執行檔案或動态連結庫 (DLL)。每個程序包含一個或多個子產品。可以使用System.Diagnostics的ProcessModule類來獲得有關子產品的資訊,這個類中有一個很有用的屬性EntryPointAddress他可以傳回擷取在系統加載和運作子產品時運作的函數的記憶體位址。然後用Visual Studio6.0中的工具,檢視該位址就可以知道是什麼函數!然後根據函數名檢視相關的資料,就可以知道這個應用程式的基本程式設計思路,這個功能對程式員很有用。

繼續閱讀