1.相較於線程,進程所使用的系統資源更多。其原因在於地址空間。為一個進程創建一個虛擬的地址空間需要大量系統資源。線程只有一個內核對象和一個棧。
2.線程的入口函數
DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; ... return(dwResult); }
線程函數的幾點說明
3.CreateThread函數
HANDLE CreateThread( PSECURITY_ATTRIBUTES psa, DWORD cbStackSize, PTHREAD_START_ROUTINE pfnStartAddr, PVOID pvParam, DWORD dwCreateFlags, PDWORD pdwThreadID);
調用CreateThread函數,系統從進程的地址空間中分配內存給線程棧使用。新線程在與負責創建的那個線程在相同的進程上下文中運行。因此,新線程可以訪問進程內核對象的所有句柄、進程中的所有內存以及同一個進程中其他所有線程的棧。
注意:CreateThread函數是用於創建線程的Windows函數。不過,如果編寫的是C/C++代碼,就絕對不要調用CreateThread。相反,正確的選擇是使用Microsoft C++運行庫函數_beginthreadex。
(1)psa參數
如果想使用線程內核對象的默認安全屬性,可以向此參數傳入NULL。
(2)cbStackSize參數
cbStackSize參數指定線程可以為其線程棧使用多少地址空間。當CreateProcess函數從開始一個進程的時候,它會在內部調用CreateThread來初始化進程的主線程。對於cbStackSize參數,CreateProcess使用了保存在可執行文件內部的一個值。預定的地址空間的容量設定了棧空間的上限,這樣才能捕獲代碼中的無窮遞歸bug。
(3)pfnStartAddr和pvParam參數
pfnStartAddr參數指定希望新線程執行的線程函數的地址。線程函數的pvParam參數與當初傳給CreateThread函數pvParam參數是一樣的。
(4)dwCreateFlags參數
dwCreateFlags參數指定額外的標志來控制線程的創建。
(5)pdwThreadID參數
該參數必須是DWORD的一個有效地址。CreateThread函數用它存儲系統分配給新線程的ID。
4.終止運行線程
線程可以通過以下4種方法來終止運行
線程函數返回(這是強烈推行的)。
線程通過調用ExitThread函數“殺死”自己。
同一個進程或另一個進程中的線程調用TerminateThread函數
包含線程的進程終止運行(這種方法避免使用)
5.