windows多線程(一) 創建線程 CreateThread


一 線程創建函數 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,如下圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM