windows多執行緒(一) 建立執行緒 CreateThread
阿新 • • 發佈:2019-02-07
一 執行緒建立函式 CreateThread
修改說明:
這裡 說了另一種建立執行緒方法,使用_beginthreadex()更安全的建立執行緒,在實際使用中儘量使用_beginthreadex()來建立執行緒,在部落格中使用 CreateThread()l來建立執行緒其實是一種不太好的方法,不過這裡只做原理分析,不用在實際專案中,暫且就這樣吧!
1. 函式原型:
HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartAddress, _In_opt_ LPVOID lpParameter, _In_ DWORD dwCreationFlags, _Out_opt_ LPDWORD lpThreadId );
2. 引數說明:
-
第一個引數
lpThreadAttributes
表示執行緒核心物件的安全屬性,一般傳入NULL表示使用預設設定。 -
第二個引數
dwStackSize
表示執行緒棧空間大小。傳入0表示使用預設大小(1MB)。 -
第三個引數
lpStartAddress
表示新執行緒所執行的執行緒函式地址,多個執行緒可以使用同一個函式地址。 -
第四個引數
lpParameter
是傳給執行緒函式的引數。 -
第五個引數
dwCreationFlags
指定額外的標誌來控制執行緒的建立,為0表示執行緒建立之後立即就可以進行排程,如果為CREATE_SUSPENDED則表示執行緒建立後暫停執行,這樣它就無法排程,直到呼叫ResumeThread()。 -
第六個引數
lpThreadId
將返回執行緒的ID號,傳入NULL表示不需要返回該執行緒ID號。
3.返回值
執行緒建立成功返回新執行緒的控制代碼,失敗返回NULL
二 例項
/* 建立第一個執行緒。主程序結束,則撤銷執行緒。 */ #include<Windows.h> #include<stdio.h> DWORD WINAPI ThreadFunc(LPVOID); void main() { HANDLE hThread; DWORD threadId; hThread = CreateThread(NULL, 0, ThreadFunc, 0, 0, &threadId); // 建立執行緒 printf("我是主執行緒, pid = %d\n", GetCurrentThreadId()); //輸出主執行緒pid Sleep(2000); } DWORD WINAPI ThreadFunc(LPVOID p) { printf("我是子執行緒, pid = %d\n", GetCurrentThreadId()); //輸出子執行緒pid return 0; }
這個程式功能很簡單,主執行緒建立一個執行緒,同時主執行緒和子執行緒分別向控制檯輸出執行緒的PID,如下圖: