Bawię się wątkami i mam taki kod
class MyAnyClass : public QThread
{
Q_OBJECT
public:
MyAnyClass(QObject *parent=nullptr);
private:
QTimer *timer;
// QThread interface
protected:
virtual void run() override{
qInfo()<< "Watek dziala :)";
timer = new QTimer();
QObject::connect(timer, &QTimer::timeout, this, [this](){
for(int i=0; i<15; ++i){
qInfo()<< "watek ciezko pracuje" << i;
}
emit endTimer();
});
timer->setInterval(1000);
timer->start();
this->exec(); //start pętli zdarzeń dla timera
}
public slots:
void stopTimer(){
//sprawdzam czy timer został utworzony tj. czy jest przypisany do niego adres
//jeżeli tak, to mogę poprawnie zakończyć timer
if(timer){
timer->stop();
this->quit(); //koniec pętli zdarzeń dla timera
}
}
signals:
void endTimer();
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyAnyClass thread;
QObject::connect(&thread, &QThread::started, [](){qInfo() << "start watku";});
QObject::connect(&thread, &QThread::finished, [](){qInfo()<< "koniec watku";});
QObject::connect(&thread, &QThread::finished, &thread, &QThread::quit);
thread.start();
thread.wait();
return a.exec();
}
błąd jest w funkcji run
w miejscu rejestracji sygnałów i slotów connect
-
dlaczego pętla w ogóle się nie uruchamia?
-
jak zmienię zawartość w funkcji
connect
naQObject::connect(timer, &QTimer::timeout, [&](){
to pętla się uruchamia ale działa w nieskończoność i sygnał
endTimer();
nie uruchamia się aby zakończyć wątek.Czy ktoś pomoże rozwiązać problem? I co robię źle?