我读到以下post以实现线程处理程序以在线程中传递方法类。
我想从文章中描述的那个创建一个通用的线程处理程序。 所以我所做的只是虚拟化方法MainThread(),然后在继承虚拟类ThreadHandler的类中实现它(就像在python中一样,你必须定义一个run()方法,当你调用Start()时执行)
class MyClass{
public:
MyClass() : the_thread() {}
~MyClass(){}
void Start(){
the_thread = std::thread(&MyClass::ThreadMain,this);
}
virtual void ThreadMain() = 0 ;
private:
std::thread the_thread;
};
谢谢! :D
当我运行以下代码时:
class A : public MyClass {
private: ...
public:
void Run(void) {
std::cout << "Hi" ;
};
int main() {
A().Start()
}
但它不起作用:在执行时它告诉我已经调用了一个纯虚方法。
我正在考虑使用类似的模板解决方案:
class ThreadHandler {
private:
std::thread the_thread ;
T* object ;
public:
void Start() {
the_thread = std::thread(&T::Run, *object);
};
ThreadHandler(void) : the_thread() {};
~ThreadHandler(void) {};
};
一个想法?