我想實現類似於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