有没有像pthread_create这样的std::thread_create?
Is there an std::thread_create like pthread_create?
我正在这里开展一个项目,试图将一些 Linux C++ 代码移植到跨平台,我这里有一个使用 pthread
的包装器线程 class。
#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 指针双重转换吗?
我没有关于我正在使用的代码库的文档,所以我的猜测和其他人的一样好。
std::thread
的构造函数将使用提供的函数和参数启动新线程。
大致如此:
void thread_func(int, double) {
}
class ServerThread {
std::thread thr;
ServerThread(int arg1, double arg2)
: thr(thread_func, arg1, arg2) {
}
};
如果想运行线程在构造之后,可以先default-initializestd::thread
,这样不会启动一个实际的线程,然后再移动一个新的std::thread
稍后启动线程的实例:
class ServerThread {
std::thread thr;
ServerThread() : thr() {
}
void StartThread(int arg1, double arg2) {
thr = std::thread(thread_func, arg1, arg2);
}
};
我正在这里开展一个项目,试图将一些 Linux C++ 代码移植到跨平台,我这里有一个使用 pthread
的包装器线程 class。
#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 指针双重转换吗?
我没有关于我正在使用的代码库的文档,所以我的猜测和其他人的一样好。
std::thread
的构造函数将使用提供的函数和参数启动新线程。
大致如此:
void thread_func(int, double) {
}
class ServerThread {
std::thread thr;
ServerThread(int arg1, double arg2)
: thr(thread_func, arg1, arg2) {
}
};
如果想运行线程在构造之后,可以先default-initializestd::thread
,这样不会启动一个实际的线程,然后再移动一个新的std::thread
稍后启动线程的实例:
class ServerThread {
std::thread thr;
ServerThread() : thr() {
}
void StartThread(int arg1, double arg2) {
thr = std::thread(thread_func, arg1, arg2);
}
};