多線程函數CreateThread(一)

採用CreateThread創建多線程程序

在window環境下,Win32 提供了一系列的API函數來完成線程的創建、掛起、恢復、終結以及通信等工作:

1、主要的函數列表:

序號

函數名

功能

1

CreateThread()

創建一個新線程

2

ExitThread()

正常結束一個線程的執行

3

TerminateThead()

強制終止一個線程的執行

4

ResumeThread()

重啓一個線程

5

SuspendThread()

掛起一個線程

6

GetExiCodeThread()

得到一個線程的退出碼

7

GetThreadPriority()

得到一個線程的優先級

8

SetThreadPriority()

設置一個線程的優先級

9

CloseHandle()

關閉一個線程的句柄

10

CreateRemoteThread()

再另一個進程中創建一個新線程

11

PostThreadMessage()

發送一條消息給指定的線程

12

GetCurrentThread()

得到當前的線程句柄

13

GetCurrentThreadId()

得到當前線程的ID

14

GetThreadId()

得到指定線程的ID

15

WaitForSingleObject()

等待單個對象

16

WaitForMultipleObjects()

等待多個對象

2、CreateThread函數原型:

HANDLE WINAPI CreateThread(
    LPSECURITY_ATTRIBUTES   lpThreadAttributes, //線程安全相關的屬性,常置爲NULL
    SIZE_T                  dwStackSize,        //新線程的初始化棧在大小,可設置爲0
    LPTHREAD_START_ROUTINE  lpStartAddress,     //被線程執行的回調函數,也稱爲線程函數
    LPVOID                  lpParameter,        //傳入線程函數的參數,不需傳遞參數時爲NULL
    DWORD                   dwCreationFlags,    //控制線程創建的標誌
    LPDWORD                 lpThreadId          //傳出參數,用於獲得線程ID,如果爲NULL則不返回線程ID
);

3、線程函數的定義:

線程函數的規範格式定義爲

DWORD  WINAPI ThreadProc (LPVOID lpParam);//格式不正確將無法調用成功。函數名稱沒有限制,只要符合命名規則就可以。

簡單例子:

DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
	int tipMsg = (int)lpParameter;
	CString strMsg;
	strMsg.Format(L"%d", tipMsg);
	AfxMessageBox(strMsg);
	return 0;
}

void CThreadTestOneDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知處理程序代碼
	DWORD dwThreadID = 0;
	HANDLE hThread = CreateThread(NULL,0, ThreadProc,(LPVOID)123,0,&dwThreadID);
	CloseHandle(hThread);
}

 

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