4

JavaのRunnableインターフェースに似たものを実現したいと思います。私はそのようにそれをしようとします:

class Runnable{
    public:
        void start(){
            t = std::thread(&Runnable::run, this);
        }
    protected:
        virtual void run(){
        }
};

アイデアは単純です。runメソッドをオーバーロードしたいのですが、start()はオーバーロードされたメソッドを起動する必要があります。しかし...それは機能しません。

terminate called after throwing an instance of 'std::system_error'
  what():  Operation not permitted

PS私は、Runnableから派生したクラスのインスタンスを、dlopenを使用したダイナミックライブラリからロードします。

4

2 に答える 2

4

-pthreadこのエラーは、コマンドラインでの使用を忘れたときにGCCによって生成されることがよくあります。

于 2011-12-25T19:49:19.033 に答える
0

あなたのコードには 1 つの問題があります。クラスのコンストラクターから仮想関数を呼び出すことはできません。これを行うと、未定義の動作が発生します。

于 2011-12-26T08:44:42.260 に答える