BeginThreadEx
是一個 Windows API 函數,用于創建一個新的線程。要正確使用 BeginThreadEx
創建線程,你需要遵循以下步驟:
#include <windows.h>
線程函數是線程執行的入口點。它應該返回一個 DWORD
值,并接受一個 LPVOID
參數。例如:
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
// 線程執行的代碼
return 0;
}
BeginThreadEx
創建線程:HANDLE hThread = BeginThreadEx(
NULL, // 默認安全屬性
0, // 默認堆棧大小
ThreadFunction, // 線程函數
lpParam, // 傳遞給線程函數的參數
0, // 默認創建標志
&dwThreadId // 接收線程ID的變量地址
);
其中,lpParam
是傳遞給線程函數的參數。dwThreadId
是一個 DWORD
類型的變量,用于存儲新創建線程的 ID。
if (hThread == NULL) {
// 創建線程失敗,處理錯誤
} else {
// 線程創建成功,可以繼續執行其他操作
}
要終止線程,你可以調用 TerminateThread
函數。請注意,這將立即終止線程,可能導致未完成的操作和資源泄漏。因此,通常建議使用其他方法(如等待線程完成)來終止線程。
if (hThread != NULL) {
WaitForSingleObject(hThread, INFINITE); // 等待線程完成
CloseHandle(hThread); // 關閉線程句柄
}
這是一個完整的示例:
#include <stdio.h>
#include <windows.h>
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
printf("Hello from thread!\n");
return 0;
}
int main() {
HANDLE hThread;
DWORD dwThreadId;
hThread = BeginThreadEx(
NULL, // 默認安全屬性
0, // 默認堆棧大小
ThreadFunction, // 線程函數
NULL, // 傳遞給線程函數的參數
0, // 默認創建標志
&dwThreadId // 接收線程ID的變量地址
);
if (hThread == NULL) {
printf("Failed to create thread.\n");
return 1;
} else {
printf("Thread created with ID: %lu\n", dwThreadId);
// 等待線程完成
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread); // 關閉線程句柄
}
return 0;
}
這個示例將創建一個新線程,該線程將輸出 “Hello from thread!”。主線程將等待新線程完成,然后關閉線程句柄。