我正在编写Java样式的Thread类而且我被卡住了,因为当我的包装器函数将接收到的无效指针转换为Runnable指针时,它会导致分段错误,因为程序不知道哪个运行( )打电话。 我尝试了不同的强制转换,我试图传递struct,包含指向Runnable的指针,但在所有情况下它都像俄罗斯轮盘一样:几乎100%的段错误,但也可能运行良好,尤其是在gdb的第一次运行时。
#include <pthread.h>
class Runnable {
public:
virtual void run() {};
virtual ~Runnable() {};
};
static void* __outerwrapper(void* arg) {
( reinterpret_cast<Runnable*>(arg) )->run();
pthread_exit(NULL);
}
class Thread : public Runnable {
public:
Thread() : target(this) {};
Thread(Runnable* target) : target(target) {};
void start() {
pthread_create(&(this->thread), NULL, __outerwrapper, this->target);
}
private:
Runnable* target;
pthread_t thread;
};
int main () {
Thread t;
t.start();
}
我想使用该界面,但为了使其有效,我需要更改哪些内容?