gpt4 book ai didi

c++ - 无法在 pthread 中从类型 void* (类名)(void*) 转换为类型 void* (*)(void*)

转载 作者:行者123 更新时间:2023-11-28 00:00:34 29 4
gpt4 key购买 nike

我正在尝试在主函数中创建一个线程并通过我的线程调用另一个类的函数。

在 main.cpp 中:

SocketHandler *callserver;
pthread_t thread1;
pthread_create(&thread1,0, callserver->createSocket,NULL);

在 SocketHandler.h 中:

void* createSocket();

在 SocketHandler.cpp 中:

void * SocketHandler::createSocket()
{
//....
}

当我尝试编译 main.cpp 时出现错误

 cannot convert SocketHandler::createSocket from type void* (SocketHandler::)() to type void* ( * )(void*)

最佳答案

pthread_create() 只接受指向常规函数或类函数的指针,不接受指向成员函数的指针。该指针必须是 void *(*)(void *)。要解决此问题,您可以执行以下操作:

void *trampoline(void *arg) {
SocketHandler *callServer = static_cast<SocketHandler *>(arg);
callServer->createSocket();
return nullptr;
}

// ...
SocketHandler *callserver;
pthread_t thread1;
pthread_create(&thread1,0, trampoline, callserver);

trampoline() 可以内联:

pthread_create(&thread1, 0, [](void* ptr){static_cast<SocketHandler*>(ptr)->createSocket(); return (void*)nullptr;}, callserver);

或者,您可以使用 std::thread,这样也可以轻松使用成员函数。

关于c++ - 无法在 pthread 中从类型 void* (类名)(void*) 转换为类型 void* (*)(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39391769/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com