【发布时间】:2019-09-05 20:23:23
【问题描述】:
我正在这里工作一个项目,试图将一些 Linux C++ 代码移植到跨平台,我这里有一个使用 pthread 的包装线程类。
#include <pthread.h>
class ServerThread {
public:
pthread_t tid;
pthread_mutex_t mutex;
int Create (void* callback, void* args);
};
我正在尝试将其直接移植到std::thread,但这里的Create 方法使用pthread_create,据我所知启动线程,但我找不到std 等效项。
int ServerThread :: Create (void* callback, void* args) {
int tret = 0;
tret = pthread_create(&this->tid, nullptr, (void*(*)(void *)) callback, args);
if (tret != 0) {
std::cerr << "Error creating thread." << std::endl;
return tret;
}
return 0;
}
我真的不明白我在用 pthread_create 函数调用看什么。这是某种奇怪的 void 指针双重转换吗?
我没有关于我正在使用的代码库的文档,所以我的猜测和接下来的人一样好。
【问题讨论】:
-
我猜最接近
pthread_create的方法是构造一个新的std::thread对象。没有直接翻译。 -
(void*(*)(void *))正在从void*转换函数指针。这只是有条件地支持,并非所有平台都允许这样做。