線程(英語:thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。一個進程可以有很多線程,每條線程並行執行不同的任務。
在window應用程序時,操作系統會自動創建一個主線程,通過主線程,可以創建多個線程或進程。
1、頭函數
使用CreateThread函數需要圖函數“windows.h”:
#include "windows.h"
2、函數原型
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//線程安全屬性
DWORD dwStackSize, //堆棧大小
LPTHREAD_START_ROUTINE lpStartAddress, //線程函數
LPVOID lpParameter, //線程參數
DWORD dwCreationFlags, //線程創建屬性
LPDWORD lpThreadId //線程ID
);
3、參數說明
lpThreadAttributes:指向SECURITY_ATTRIBUTES型態的結構的指針。設置參數值爲NULL表示使用默認安全性,不可以被子線程繼承,否則需要定義一個結構體將它的bInheritHandle成員初始化爲TRUE
dwStackSize:設置初始棧的大小,以字節爲單位,如果爲0,那麼默認將使用與調用該函數的線程相同的棧空間大小。任何情況下,Windows根據需要動態延長堆棧的大小。
lpStartAddress:指向線程函數的指針,線程函數名稱沒有限制,必須以下列形式聲明:
DWORD WINAPI 函數名 (LPVOID lpParam) ,格式不正確將無法調用成功。
lpParameter:向線程函數傳遞的參數,是一個指向結構的指針,不需傳遞參數時,爲NULL。
dwCreationFlags :線程標誌,可取值如下
(1)CREATE_SUSPENDED(0x00000004):創建一個掛起的線程,
(2)0:表示創建後立即激活。
lpThreadId:保存新線程的id,一般設置爲NULL;
返回值:函數成功,返回線程句柄;函數失敗返回false。
4、函數示例
主線程爲printf("執行主線程\n"); 當CPU有空閒時執行次線程printf("執行線程printfThread\n");
#include "stdafx.h"
#include "windows.h"
DWORD WINAPI printfThread(LPVOID IParam)
{
while (true)
{
printf("執行線程printfThread\n");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE mThread;
mThread = CreateThread(NULL, 0, printfThread, NULL, 0, NULL);
while (true)
{
printf("執行主線程\n");
}
return 0;
}