从Windows线程函数返回char *的方法有多种,以下是其中两种常见的方法:
方法一:使用堆内存分配
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
char* result = (char*)malloc(sizeof(char) * 10); // 分配内存
strcpy(result, "Hello"); // 复制数据
return (DWORD)result; // 返回内存指针
}
int main()
{
HANDLE hThread;
DWORD dwThreadId;
hThread = CreateThread(NULL, 0, MyThreadFunction, NULL, 0, &dwThreadId);
if (hThread == NULL)
{
printf("Failed to create thread\n");
return 1;
}
// 等待线程结束
WaitForSingleObject(hThread, INFINITE);
// 获取线程返回值
DWORD dwExitCode;
GetExitCodeThread(hThread, &dwExitCode);
// 打印返回的char *数据
printf("Returned string: %s\n", (char*)dwExitCode);
// 释放内存
free((char*)dwExitCode);
// 关闭线程句柄
CloseHandle(hThread);
return 0;
}
方法二:使用全局变量
示例代码:
#include <stdio.h>
#include <windows.h>
char* g_result; // 全局变量
DWORD WINAPI MyThreadFunction(LPVOID lpParam)
{
g_result = "Hello"; // 赋值给全局变量
return 0;
}
int main()
{
HANDLE hThread;
DWORD dwThreadId;
hThread = CreateThread(NULL, 0, MyThreadFunction, NULL, 0, &dwThreadId);
if (hThread == NULL)
{
printf("Failed to create thread\n");
return 1;
}
// 等待线程结束
WaitForSingleObject(hThread, INFINITE);
// 打印返回的char *数据
printf("Returned string: %s\n", g_result);
// 关闭线程句柄
CloseHandle(hThread);
return 0;
}
以上是两种常见的从Windows线程函数返回char *的方法。具体选择哪种方法取决于实际需求和设计。
领取专属 10元无门槛券
手把手带您无忧上云