標籤:std sum 調度 ddr thread 分享圖片 主線程 功能 參數
一 線程建立函數 CreateThread1. 函數原型:
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,如:
windows多線程(一) 建立線程 CreateThread