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!”。主线程将等待新线程完成,然后关闭线程句柄。