3 回答

TA貢獻1863條經驗 獲得超2個贊
一、Windows API函數。該函數在主線程的基礎上創建一個新線程。微軟在Windows API中提供了建立新的線程的函數CreateThread。
二、CreateThread將在主線程的基礎上創建一個新線程,大致做如下步驟:
1.在內核對象中分配一個線程標識/句柄,可供管理,由CreateThread返回
2.把線程退出碼置為STILL_ACTIVE,把線程掛起計數置1
3.分配context結構
4.分配兩頁的物理存儲以準備棧,保護頁設置為PAGE_READWRITE,第2頁設為PAGE_GUARD
5.lpStartAddr和lpvThread值被放在棧頂,使它們成為傳送給StartOfThread的參數
6.把context結構的棧指針指向棧頂(第5步)指令指針指向startOfThread函數
三、MSDN中CreateThread原型:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD
SIZE_T dwStackSize,//initialstacksize
LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction
LPVOID lpParameter,//threadargument
DWORD dwCreationFlags,//creationoption
LPDWORD lpThreadId//threadidentifier
)
processthreadsapi.h中CreateThread原型:
WINBASEAPI
_Ret_maybenull_
HANDLE
WINAPI
CreateThread(
_In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_SIZE_T dwStackSize,
_In_LPTHREAD_START_ROUTINE lpStartAddress,
_In_opt___drv_aliasesMemLPVOID lpParameter,
_In_DWORD dwCreationFlags,
_Out_opt_LPDWORD lpThreadId
);
四、示例:

TA貢獻1921條經驗 獲得超9個贊
關于六個參數:第一個是所創線程的安全屬性,多設置為NULL; 第二個是所創線程堆棧的大小,多設為0; 第三個是你創建的線程的地址;(此處應為你的線程函數的函數名) 第四個是傳遞給你的線程函數的參數; 第五個是表示你創建的線程是否立即執行,設為0則立即執行; 第六個則是你創建線程的ID號,設為NULL就行。關于線程你要知道他有一個對應的線程函數,你創建線程后即執行你的函數(若你指定第五個參數為0立即執行,所執行的函數即為第三個參數)對于二樓他設置了一個等待,若無此等待可能會導致創建線程的函數已經退出,而你的線程卻還在運行。
- 3 回答
- 0 關注
- 1739 瀏覽
添加回答
舉報