bản sao của: "pure virtual method called" when implementing a boost::thread wrapper interfacethúc đẩy chủ đề phá hủy đa hình
Tôi đang cố gắng tạo phiên bản hướng đối tượng nhiều hơn cho chủ đề bằng cách sử dụng các chuỗi tăng.
Vì vậy, tôi đã tạo ra một lớp Thread:
class Thread {
public:
Thread() {}
virtual ~Thread() { thisThread->join(); }
void start() { thisThread = new boost::thread(&Thread::run, this); }
virtual void run() {};
private:
boost::thread *thisThread;
};
lớp này tạo ra các chủ đề trong start() như thế này:
thisThread = new boost::thread(&Thread::run, this);
Vấn đề là khi tôi tạo ra một lớp mà ghi đè phương thức run()
, phương thức run()
từ Chủ đề được gọi theo chuỗi thay vì phương thức run()
mới
ví dụ tôi có một lớp học kéo dài Ðề tài:
class CmdWorker: public Thread {
public:
CmdWorker() : Thread() {}
virtual ~CmdWorker() {}
void run() { /* deosn't get called by the thread */ }
};
khi tôi làm
Thread *thread = new CmdWorker();
thread.start(); //---> calls run() from Thread instead of run() from CmdWorker
nhưng chỉ để được rõ ràng hơn:
thread.run(); calls the correct run from CmdWorker, (run() is virtual from Runnable)
Bất cứ ý tưởng tại sao điều này xảy ra hoặc làm thế nào nó có thể được cố định?
LƯU Ý: Tôi tạo ra một chức năng (mà không có gì để làm với các lớp Thread)
void callRun(Thread* thread) {
thread->run();
}
và thay đổi tạo thread để:
thisThread = new boost::thread(callRun, this);
khi gỡ lỗi tôi nhận thấy rằng thread
con trỏ trỏ đến một đối tượng thuộc loại Chủ đề thay vì CmdWorker
EDIT:
đangtestcase tại địa chỉ: http://ideone.com/fqMLF và http://ideone.com/Tmva1
Object dường như được thái lát (nhưng điều này là kỳ lạ kể từ khi con trỏ được sử dụng)
không quản lý để thêm động lực để nó
Câu hỏi này không rõ ràng với tôi! – Nawaz
Không đủ mã. Tôi không thấy làm thế nào bạn sẽ sử dụng cấu trúc như vậy. –
FYI 'std :: thread' đang đến. Điều gì chính xác là sai với 'boost :: thread'? – spraff