Good Day,

I have in my application, two classes.  When the application starts up, one of 
the classes -backgroundtaskmanager - gets instantiated.  In the constructor, a 
QTimer is started to timeout every 5 minutes and call runTasks.  The 
instantiation is then moved to a separate thread so that it can run without 
impacting the rest of the application.

Here are the contents of the constructor.

QTimer* timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(runTasks()));
    timer->start(300000); //fiveminutes
    thread = new QThread();
    this->moveToThread(thread);
    thread->start();


The second class -player- is instantiated in the main thread.  Once it is 
instantiated, it begins doing other tasks.  Basically, a method is called with 
the following code.  This code is designed to make the while loop delay for one 
second before executing the rest of the loop (one second-ish, I know it is not 
perfect but it has good enough resolution for what I need).


while(!taskQueue.isEmpty()) {
        qDebug() << “BEFORE QEVENTLOOP”;
QEventLoop wait1Sec;
        QTimer::singleShot(1000, &wait1Sec,SLOT(quit()));
        wait1Sec.exec();
aDebug() << “AFTER QEVENTLOOP”;

QList<Task*> instances;
 for(int t=seconds; t>previousTime; t—) {
  QList<Task*> vals = taskQueue.values(t);
 while(!vals.isEmpty()) {
 instances.insert(0, vals.takeLast());
 }
 taskQueue.remove(t);
 }
 previousTime = seconds;
 miliSeconds = QDateTime::currentMSecsSinceEpoch() - today.toMSecsSinceEpoch();
 seconds = miliSeconds/1000;
}

NOTE:  the two sets of tasks these do are not related.

So, anyway, every 5 minutes the tasks in backgroundtaskmanager are run.  Some 
of these tasks can take up to a minute.  When the backgroundtaskmanager class 
runs a task that does take this long (remember it is in a separate thread), the 
player class code above gets hung in what appears to be the inside of the 
QEventLoop.  The qDebug statements don’t write out until the tasks in the 
backgroundtaskmanager are finished.  Then it rushes through to catch up.

My question is, am I correctly doing this at all?  Is this the proper use of a 
QEventLoop?

Thanks!

-Jason

- - - - - - - - - - - - - - - - - - - - - - -
Jason R. Kretzer

Application Developer
Google # 606-887-9011
Cell # 606-792-0079
ja...@gocodigo.com<mailto:ja...@gocodigo.com>

“quidquid latine dictum sit altum videtur”


[cid:image001.png@01CECA4D.CA4030A0]

<<inline: image001.png>>

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to