Windows編程(一)句柄、進程、線程


句柄是指向指針的指針。

句柄地址(穩定)→記載着對象在內存中的地址────→對象在內存中的地址(不穩定)→實際對象

Handle 是代表系統的 內核對象,如 文件句柄,線程句柄,進程句柄。
HMODULE 是代表 應用程序載入的模塊,win32系統下通常是被載入模塊的 線性地址
HINSTANCE 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因為win16
HWND 是窗口句柄。
 
熟悉C編程的人都知道 main函數帶有2個參數:argc和argv,完整的main函數定義是:int main(int argc, char *argv[])。argc指示程序啟動時 命令行參數的個數,argv則包含具體的參數字符串。
如果有程序叫“ hello.exe”,直接啟動時,argc=1, argv[0]=hello.exe。
如果以“hello.exe readme.txt”的形式啟動,argc=2, argv[0]=hello.exe, argv[1]=readme.txt
通過這兩個參數,程序可以獲知自身在啟動時的命令行信息。
而在WinMain函數中,帶有4個參數,分別是:hInstance, hPrevInstance, lpCmdLine, nShowCmd。
HINSTANCE hInstance;是應用程序的實例句柄。HINSTANCE是一個指針變量,指向HINSTANCE結構體,而結構體的中只一個int變量。在WINDOWS中句柄多被這種方式進行定義。
          ————————————來源< HINSTANCE>

程序啟動--->_tWinMain(hInstance, hPrevInstance, lpCmdLine, nShowCmd)
啟動代碼調用Win32 API,獲取hInstance,lpCmdLine,nCmdShow 3個參數,
然后調用_tWinMain,即 WinMain 或者 wWinMain

hPrevInstance 這個參數是Win16 的遺留參數,用來判斷,同一程序的另一個實例,是否已經啟動。現在已經沒用了,缺省設置為NULL。

lpCmdLine 是命令行參數
nCmdShow 是窗體顯示方式。
 hInstance 是實例句柄,實際上通常,這個是程序的啟動地址。大概是0x400000 即 4M 的位置,4M 以下是系統保留的------用於捕獲空指針異常的。因為 Win32 每個進程,有自己的地址空間,所以,幾乎都是從同一地址啟動的。

 

 

 

Windows進程

在Windows中進程是裝入內存並執行的程序(exe...),每個進程都有獨立的虛擬地址空間,本質是虛擬地址空間加各種資源、線程等的載體或容器,是不活動的。

每個進程都由單線程(主線程)開始。 

 

Windows線程

是可以被執行的最小調度單位。

進程中所有線程共享虛擬地址空間並能訪問全局變量和該進程的系統資源。

 

GetCurrentProcess  //得到進程句柄

GetCurrentThread  //得到線程句柄

DuplicateHandle  //傳遞或跨線程操作,復制句柄后再做操作

無符號32位值唯一標識一個進程或線程,被稱為進程或線程的ID

GetCurrentProcessID

GetCurrentThreadID

 

 

windows編程BLOG

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM