Я только начинаю изучать C ++ и пытаюсь создать класс Thread, который имеет базовые функциональные возможности класса Java Thread.То, что я пытаюсь сделать, это создать класс, который вы подкласс, написать метод Run (который является чисто виртуальным в базовом классе), создать объект подкласса, вызвать метод start на нем, и у вас есть поток.
Проблема в том, что в том, как я использую C ++, диспетчеризация не выполняется правильно - как будто функция Run не виртуальная, вызывается метод Run базового класса.
Вот коддля заголовка
#ifndef _THREAD_H_
#define _THREAD_H_
#include <pthread.h>
class Thread {
public:
Thread();
void Start();
~Thread();
protected:
virtual void Run() = 0;
private:
static void *RunWrapper(void *);
pthread_t thread;
};
#endif
Реализация
#include "thread.h"
#include <pthread.h>
Thread::Thread() {
}
void Thread::Start() {
pthread_create(&thread, NULL, Thread::RunWrapper, (void *) this);
}
void *Thread::RunWrapper(void *arg) {
Thread *t = (Thread *) arg;
t->Run();
return arg;
}
Thread::~Thread() {
pthread_join(thread, NULL);
}
И файл, который на самом деле пытается что-то сделать
#include <iostream>
#include "thread.h"
class MyThread : public Thread {
protected:
void Run() {
std::cout << "The thread is runned" << std::endl;
}
};
int main(void) {
MyThread thread;
thread.Start();
return 0;
}
Ошибка, которую я получаю за последние 10Часы это:
pure virtual method called
terminate called without an active exception