2016-05-19 5 views
0

Also ich versuche, eine Timer-Klasse zu kapseln, die alle blutigen Details von Multi-Threading und Timer behandelt.QtConcurrent :: run mit einem virtuellen Klassenmitglied

Hier ist mein Code: 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()); 
} 

Die Idee war TimedEvent eine Basisklasse sein würde, und ich wäre in der Lage sehr leicht abgeleiteten Klassen zu erstellen.

Das Problem ist, ich kann nicht herausfinden, was zu dem QtConcurrent :: run Anruf übergeben werden. Ich bin mir nicht sicher, ob das überhaupt möglich ist. Ich könnte den QTConcurrent :: run-Aufruf an die abgeleitete Klasse verschieben, aber ich erwarte, dass es mehrere dieser abgeleiteten Klassen gibt.

Irgendwelche Ideen würden geschätzt.

K.

Antwort

1

Dieser Code:

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

völlig in Ordnung ist und das tut, was Sie erwarten. Es wird eine überschriebene Version von TimeoutWorkProcedure aufrufen.

Verwandte Themen