BeginThreadEx
是一個(gè) Windows API 函數(shù),用于創(chuàng)建一個(gè)新的線程。要正確使用 BeginThreadEx
創(chuàng)建線程,你需要遵循以下步驟:
#include <windows.h>
線程函數(shù)是線程執(zhí)行的入口點(diǎn)。它應(yīng)該返回一個(gè) DWORD
值,并接受一個(gè) LPVOID
參數(shù)。例如:
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
// 線程執(zhí)行的代碼
return 0;
}
BeginThreadEx
創(chuàng)建線程:HANDLE hThread = BeginThreadEx(
NULL, // 默認(rèn)安全屬性
0, // 默認(rèn)堆棧大小
ThreadFunction, // 線程函數(shù)
lpParam, // 傳遞給線程函數(shù)的參數(shù)
0, // 默認(rèn)創(chuàng)建標(biāo)志
&dwThreadId // 接收線程ID的變量地址
);
其中,lpParam
是傳遞給線程函數(shù)的參數(shù)。dwThreadId
是一個(gè) DWORD
類(lèi)型的變量,用于存儲(chǔ)新創(chuàng)建線程的 ID。
if (hThread == NULL) {
// 創(chuàng)建線程失敗,處理錯(cuò)誤
} else {
// 線程創(chuàng)建成功,可以繼續(xù)執(zhí)行其他操作
}
要終止線程,你可以調(diào)用 TerminateThread
函數(shù)。請(qǐng)注意,這將立即終止線程,可能導(dǎo)致未完成的操作和資源泄漏。因此,通常建議使用其他方法(如等待線程完成)來(lái)終止線程。
if (hThread != NULL) {
WaitForSingleObject(hThread, INFINITE); // 等待線程完成
CloseHandle(hThread); // 關(guān)閉線程句柄
}
這是一個(gè)完整的示例:
#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, // 默認(rèn)安全屬性
0, // 默認(rèn)堆棧大小
ThreadFunction, // 線程函數(shù)
NULL, // 傳遞給線程函數(shù)的參數(shù)
0, // 默認(rèn)創(chuàng)建標(biāo)志
&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); // 關(guān)閉線程句柄
}
return 0;
}
這個(gè)示例將創(chuàng)建一個(gè)新線程,該線程將輸出 “Hello from thread!”。主線程將等待新線程完成,然后關(guān)閉線程句柄。