我想实现类似于Java中的Runnable接口。我试图这样做:C++ Runnable类
class Runnable{
public:
void start(){
t = std::thread(&Runnable::run, this);
}
protected:
virtual void run(){
}
};
想法很简单。我想重载运行方法,然后启动()应该启动超载。但是...它不起作用。
terminate called after throwing an instance of 'std::system_error'
what(): Operation not permitted
PS我使用dlopen从动态库中加载一个派生自Runnable的类的实例。
不要试图在C++中模拟Java。尤其是Java不如C++的部分。 C++不需要“Runnable”类,因为它有函子。让你的类重载'operator()()'而不是定义'run'函数,然后简单地将它传递给一个新的'std :: thread'。更简单,更清洁,更高效 – jalf 2011-12-25 19:56:02
不幸的是,我仍然不熟悉C++ 11。我会调查一下。非常感谢! – Dejwi 2011-12-25 20:08:43
它不是特定于C++ 11。你一直在C++中使用函子。对于C++ 11来说,新的唯一部分是你已经使用的'std :: thread'类。无论如何,我会回溯一下:'std :: thread'是一个对象,它不是包含“运行”函数,而是给出在其线程中运行的函数。这个函数可以用函数指针表示,但它也可以是* functor *,它只是一个重载'operator()'的对象。具有该运算符的对象'x'可以像函数一样被“调用”,语法为'x()'。 – jalf 2011-12-25 20:28:23