sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-11-28 00:00:34 29 4
mua khóa gpt4 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*)

1 Câu trả lời

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

void *trampoline(void *arg) {
SocketHandler *callServer = static_cast(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(ptr)->createSocket(); return (void*)nullptr;}, callserver);

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

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

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com