0

そこで、マルチスレッドとタイマーの面倒な詳細をすべて処理するタイマー クラスをカプセル化しようとしています。

これが私のコードです: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::run 呼び出しに何を渡すかを理解できないことです。これが可能かどうかはわかりません。QTConcurrent::run 呼び出しを派生クラスに移動することもできますが、これらの派生クラスがいくつかあると予想されます。

どんなアイデアでも大歓迎です。

K.

4

1 に答える 1

1

このコード:

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

完全に問題なく、期待どおりに機能します。のオーバーライドされたバージョンを呼び出しますTimeoutWorkProcedure

于 2016-05-20T05:47:07.467 に答える