我正在尝试使用beginthreadex创建一个线程来运行需要char参数的函数。然而,我的C++不好,在将char转换为beginthreadex所需的const char时无法解决问题。有没有方法可以实现这一点?我发现很多人提问如何将char转换为const char,但是没有针对const char *的解答。
char a = 'z';
const char *b = &a;
当然,这是在堆栈上的。如果你需要它在堆上,
char a = 'z';
const char *b = new char(a);
new
。 - filmorstd::string::c_str
。f(const char* s);
char a = 'z';
std::string str{a};
f(str.c_str());
由于您没有展示任何代码,很难确切地知道您想要什么,但是这里有一种方法可以在线程中调用一个期望 char 类型参数的函数。如果您无法更改函数本身来转换参数,则需要一个跳板函数来充当中间人来完成这个任务并调用实际函数。
#include <Windows.h>
#include <process.h>
#include <iostream>
void ActualThreadFunc(char c)
{
std::cout << "ActualThreadFunc got " << c << " as an argument\n";
}
unsigned int __stdcall TrampolineFunc(void* args)
{
char c = *reinterpret_cast<char*>(args);
std::cout << "Calling ActualThreadFunc(" << c << ")\n";
ActualThreadFunc(c);
_endthreadex(0);
return 0;
}
int main()
{
char c = '?';
unsigned int threadID = 0;
std::cout << "Creating Suspended Thread...\n";
HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &TrampolineFunc, &c, CREATE_SUSPENDED, &threadID);
std::cout << "Starting Thread and Waiting...\n";
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
std::cout << "Thread Exited...\n";
return 0;
}
char *
隐式转换为const char *
。不需要进行任何操作。 - asveikauchar
值传递给需要指针的东西。 - Mike Seymourvoid*
。 - dalle