<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 3, 2013 at 10:39 PM, Jason Kretzer <span dir="ltr"><<a href="mailto:Jason@gocodigo.com" target="_blank">Jason@gocodigo.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Ah, I see!  Now I understand what you mean.<div><br></div><div>I rewrote my “player” object to use a Qtimer that fires every 1 second and is started/stopped according to signals.  However, it still has the same problem where the timer won’t fire sometimes for extended periods.  I guess that means something in the overall eventloop is blocking it.  So, I believe I will try to implement it in the worker kind of format you have below where I can put the timer in a thread.</div>
</div></blockquote><div><br></div><div>Also, as Thiago already suggested, while you're debugging, print out the thread ID from the worker thread and main thread objects just so that you know that they're running in different threads.<br>
<br></div><div>-mandeep<br><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>I appreciate the help!</div>
<span class="HOEnZb"><font color="#888888"><div><br></div><div>-Jason</div></font></span><div><div class="im"><br><div>
<div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:13pt;font-family:Ubuntu,sans-serif;color:rgb(146,208,80)">- - - - - - - - - - - - - - - - - - - - - - -<u></u><u></u></span></i></b></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:13pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)">Jason R. </span></i></b><b><i><span style="font-size:13pt;font-family:Ubuntu,sans-serif;color:rgb(146,208,80)">Kretzer<u></u><u></u></span></i></b></div>
<div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(38,38,38)"> </span></i></b></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(38,38,38)">Application Developer<u></u><u></u></span></i></b></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)">Google # <a href="tel:606-887-9011" value="+16068879011" target="_blank">606-887-9011</a><u></u><u></u></span></i></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)">Cell # <a href="tel:606-792-0079" value="+16067920079" target="_blank">606-792-0079</a><u></u><u></u></span></i></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)"><a href="mailto:Jason@gocodigo.com" style="color:purple" target="_blank"><span style="color:blue">Jason@gocodigo.com</span></a><b><u></u><u></u></b></span></i></div>
<div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)"> </span></i></b></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)">“quidquid latine dictum sit altum videtur”<u></u><u></u></span></i></b></div><div style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:start;font-style:normal;font-weight:normal;line-height:normal;text-transform:none;font-size:11pt;white-space:normal;font-family:Calibri,sans-serif;margin:0in 0in 0.0001pt;word-spacing:0px">
<b><i><span style="font-size:10pt;font-family:Ubuntu,sans-serif;color:rgb(127,127,127)"> </span></i></b></div><br><span><img src="cid:image001.png@01CECA4D.CA4030A0" height="76" width="192"></span>
</div>
</div><br></div><div><div class="h5"><div><div>On Dec 2, 2013, at 11:58 PM, Mandeep Sandhu <<a href="mailto:mandeepsandhu.chd@gmail.com" target="_blank">mandeepsandhu.chd@gmail.com</a>> wrote:</div><br><blockquote type="cite">
Hi Jason,<br><br><br>As Andre pointed out, have an 'outer' class manage the worker object<br>and thread for you instead of doing it from within your worker.<br><br>Eg:<br><br>SomeManagerClass::SomeManagerClass(QObject *parent) : QObject(parent)<br>
{<br>    worker = new MyWorker(); // parentless<br>    workerThread = new QThread(); // parentless<br><br>    // Move worker object to new thread<br>    worker->moveToThread(workerThread);<br><br>    connect(worker, SIGNAL(workFinished()), this, SLOT(onWorkFinished()));<br>
<br>    workerThread->start();<br>}<br>...<br>...<br>SomeManagerClass::~SomeManagerClass()<br>{<br>    workerThread->quit();<br>    workerThread->wait();<br>}<br><br>As for you event loop, I don't see any obvious issues.<br>
<br>I guess the reason you decided to wait for 1 second using an ev loop,<br>rather than have a slot handle the timeout was to make the code look<br>simple (synchronous)?<br><br>What platform are you running this on?<br><br>
-mandeep<br><br><br>On Tue, Dec 3, 2013 at 1:59 AM,  <<a href="mailto:andre@familiesomers.nl" target="_blank">andre@familiesomers.nl</a>> wrote:<br><blockquote type="cite">Hi,<br><br>It looks to me, that you're indeed doing it wrong. It seems you're<br>
trying to let your backgroundtaskmanager both manage a thread and be<br>_in_ that thread. That is not the way to go. I'd separate the two<br>issues. If you want the backgroundTaskManager to run in it's own thread,<br>
then either just make it a "front" for a backend implementation that you<br>move to a thread managed by backgroundTaskManager, or just let let the<br>whole backgroundTaskManager be unconcerned with what thread it runs in,<br>
and have whoever creates/owns/manages it be responsible for moving it to<br>a separate thread if that is desirable.<br><br>Then about your use of QEventLoop: no, I'd not use it this way.<br>QEventLoop is not meant as an escape to 'pause' execution of your<br>
method. If you want to wait for about a minute, why not use a QTimer<br>directly? I don't see a need for QEventLoop here at all.<br><br>As to why your setup doesn't work and your eventloop seems blocked<br>during your background task: I guess you gave your BackgroundTaskManager<br>
a parent object? That won't work. A whole parent/child tree must live in<br>the same thread. So, I guess your BackgroundTaskManager did not actually<br>get moved to the thread at all.<br><br>André<br><br><br>Jason Kretzer schreef op 02.12.2013 20:27:<br>
<blockquote type="cite">Maybe that last bit would be a bit more clear.<br><br>The first qDebug statement writes out — I have it set to give the<br>time when it is written as well — but the qDebug does not write<br>until after the heavy task is completed in backgroundtaskmanager. Any<br>
other time, this performs as expected, ticking along every second.<br><br>-Jason<br><br>_- - - - - - - - - - - - - - - - - - - - - - -_<br>_JASON R. __KRETZER_<br>_ _<br>_APPLICATION DEVELOPER_<br>_Google # <a href="tel:606-887-9011" value="+16068879011" target="_blank">606-887-9011</a>_<br>
_Cell # <a href="tel:606-792-0079" value="+16067920079" target="_blank">606-792-0079</a>_<br>_<a href="mailto:Jason@gocodigo.com" target="_blank">Jason@gocodigo.com</a>_<br>_ _<br>_“QUIDQUID LATINE DICTUM SIT ALTUM VIDETUR”_<br>
_ _<br><br>On Dec 2, 2013, at 2:14 PM, Jason Kretzer <<a href="mailto:Jason@gocodigo.com" target="_blank">Jason@gocodigo.com</a>> wrote:<br><br><blockquote type="cite">Good Day,<br><br>I have in my application, two classes. When the application starts<br>
up, one of the classes -backgroundtaskmanager - gets instantiated.<br>In the constructor, a QTimer is started to timeout every 5 minutes<br>and call runTasks. The instantiation is then moved to a separate<br>thread so that it can run without impacting the rest of the<br>
application.<br><br>Here are the contents of the constructor.<br><br>QTimer* timer = new QTimer(this);<br>connect(timer, SIGNAL(timeout()), this, SLOT(runTasks()));<br>timer->start(300000); //fiveminutes<br>thread = new QThread();<br>
this->moveToThread(thread);<br>thread->start();<br><br>The second class -player- is instantiated in the main thread. Once<br>it is instantiated, it begins doing other tasks. Basically, a method<br>is called with the following code. This code is designed to make the<br>
while loop delay for one second before executing the rest of the<br>loop (one second-ish, I know it is not perfect but it has good<br>enough resolution for what I need).<br><br>while(!taskQueue.isEmpty()) {<br>qDebug() << “BEFORE QEVENTLOOP”;<br>
QEventLoop wait1Sec;<br>QTimer::singleShot(1000, &wait1Sec,SLOT(quit()));<br>wait1Sec.exec();<br>aDebug() << “AFTER QEVENTLOOP”;<br><br>QList<Task*> instances;<br>for(int t=seconds; t>previousTime; t—) {<br>
QList<Task*> vals = taskQueue.values(t);<br>while(!vals.isEmpty()) {<br>instances.insert(0, vals.takeLast());<br>}<br>taskQueue.remove(t);<br>}<br>previousTime = seconds;<br>miliSeconds = QDateTime::currentMSecsSinceEpoch() -<br>
today.toMSecsSinceEpoch();<br>seconds = miliSeconds/1000;<br>}<br><br>NOTE: the two sets of tasks these do are not related.<br><br>So, anyway, every 5 minutes the tasks in backgroundtaskmanager are<br>run. Some of these tasks can take up to a minute. When the<br>
backgroundtaskmanager class runs a task that does take this long<br>(remember it is in a separate thread), the player class code above<br>gets hung in what appears to be the inside of the QEventLoop. The<br>qDebug statements don’t write out until the tasks in the<br>
backgroundtaskmanager are finished. Then it rushes through to catch<br>up.<br><br>My question is, am I correctly doing this at all? Is this the proper<br>use of a QEventLoop?<br><br>Thanks!<br><br>-Jason<br><br>_- - - - - - - - - - - - - - - - - - - - - - -_<br>
_JASON R. __KRETZER_<br>_ _<br>_APPLICATION DEVELOPER_<br>_Google # <a href="tel:606-887-9011" value="+16068879011" target="_blank">606-887-9011</a>_<br>_Cell # <a href="tel:606-792-0079" value="+16067920079" target="_blank">606-792-0079</a>_<br>
_<a href="mailto:Jason@gocodigo.com" target="_blank">Jason@gocodigo.com</a>_<br>_ _<br>_“QUIDQUID LATINE DICTUM SIT ALTUM VIDETUR”_<br>_ _<br><image001.png><br>_______________________________________________<br>Interest mailing list<br>
<a href="mailto:Interest@qt-project.org" target="_blank">Interest@qt-project.org</a><br><a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
</blockquote><br><br>_______________________________________________<br>Interest mailing list<br><a href="mailto:Interest@qt-project.org" target="_blank">Interest@qt-project.org</a><br><a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
</blockquote>_______________________________________________<br>Interest mailing list<br><a href="mailto:Interest@qt-project.org" target="_blank">Interest@qt-project.org</a><br><a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
</blockquote>_______________________________________________<br>Interest mailing list<br><a href="mailto:Interest@qt-project.org" target="_blank">Interest@qt-project.org</a><br><a href="http://lists.qt-project.org/mailman/listinfo/interest" target="_blank">http://lists.qt-project.org/mailman/listinfo/interest</a><br>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div></div>