将线程函数的地址作为回调传递给WinAPI,需要确保线程函数的签名与WinAPI期望的回调函数签名相匹配。以下是一个简单的示例,展示了如何将线程函数的地址作为回调传递给WinAPI:
#include<windows.h>
#include<iostream>
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
std::cout << "线程函数正在运行..."<< std::endl;
return 0;
}
int main() {
DWORD threadId;
HANDLE hThread = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
ThreadFunction, // 线程函数的地址
NULL, // 传递给线程函数的参数
0, // 使用默认创建标志
&threadId); // 接收线程ID的变量地址
if (hThread == NULL) {
std::cerr << "创建线程失败,错误代码:"<< GetLastError()<< std::endl;
return 1;
}
// 等待线程完成
WaitForSingleObject(hThread, INFINITE);
// 关闭线程句柄
CloseHandle(hThread);
return 0;
}
在这个示例中,我们定义了一个名为ThreadFunction
的线程函数,并将其地址作为参数传递给CreateThread
函数。CreateThread
函数会创建一个新的线程,并在该线程中运行ThreadFunction
函数。
注意,线程函数的签名必须与WinAPI期望的回调函数签名相匹配。在本例中,线程函数的签名为DWORD WINAPI ThreadFunction(LPVOID lpParam)
,这与WinAPI期望的回调函数签名相匹配。
领取专属 10元无门槛券
手把手带您无忧上云