2016-05-19 11 views
0

私はマルチスレッドとタイマーの細部の詳細をすべて処理するタイマークラスをカプセル化しようとしています。ここでQtConcurrent ::仮想クラスメンバーを使って実行

は私のコードです: TimedEvent.h

class TimedEvent : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit TimedEvent(QObject *parent = 0); 
    TimedEvent(const int intervalInMsecs); 
    virtual void TimeoutWorkProcedure() = 0; 
private slots: 
    void TimeoutWorkThread(); 
protected: 

    QTimer *myTimer; 
}; 

TimedEvent.cpp

TimedEvent::TimedEvent(QObject *parent) : 
    QObject(parent) 
{ 
} 

TimedEvent::TimedEvent(const int intervalInMsecs) 
{ 
    // Create timer 
    // 
    myTimer = new QTimer(this); 

    // Connect the timeout signal to our virtual callback function 
    // 
    connect(myTimer, SIGNAL(timeout()), this, SLOT(TimeoutWorkThread())); 

    myTimer->start(intervalInMsecs); 
} 

void TimedEvent::TimeoutWorkThread() 
{ 
    QtConcurrent::run(this, &TimedEvent::TimeoutWorkProcedure()); 
} 

アイデアはTimedEventは、基本クラスになり、私は非常に簡単に派生クラスを作成することができるだろうでした。

class MyClass : public TimedEvent 
{ 
    public: 
    MyClass(const int timeoutInMsecs); 
    TimeoutWorkProcedure(){ do some background stuff }; 
}; 

問題は、私はQtConcurrent ::実行コールに渡すかを把握することはできませんです。これが可能であるかどうかはわかりません。 QTConcurrent :: runを派生クラスに移動することもできますが、これらの派生クラスがいくつか存在することが予想されます。

すべてのアイデアをいただければ幸いです。

K.

答えて

1

このコード:

void TimedEvent::TimeoutWorkThread() 
{ 
    QtConcurrent::run(this, &TimedEvent::TimeoutWorkProcedure); 
} 

は完全に罰金であり、あなたが期待するものでしょう。それはTimeoutWorkProcedureのオーバーライドされたバージョンを呼び出します。

関連する問題