C++---多線程之createthread創建線程

線程(英語: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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章