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;
};

定时事件.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 回答