[Qt-interest] Qthread takes a long time to stop
william.crocker at analog.com
william.crocker at analog.com
Sun Jun 20 14:06:05 CEST 2010
>
> Also, on close, while the main GUI thread is waiting for the helper
> threads.., I get the following message dialog on Linux:
>
>
>
> Warning:
> The Window “sampleapp” is not responding
> Force Quit the application?
> Yes-no
>
For me that is a known RedHat #4 bug.
(or so I am told)
>
>
> This appears very briefly..the application then closes before the user
> has a chance to click on either yes or no..( probably because the wait
> period is over..)
>
>
>
> Any ideas why this could be happening and what I could do to prevent it?
>
>
>
> Thanks,
>
> Sarvesh
>
>
>
> *From:* qt-interest-bounces at trolltech.com
> [mailto:qt-interest-bounces at trolltech.com] *On Behalf Of *Scott Bloom
> *Sent:* Saturday, June 19, 2010 9:06 PM
> *To:* Qt-Interest
> *Subject:* Re: [Qt-interest] Qthread takes a long time to stop
>
>
>
> You basiclly answered it yourself.
>
> You need to shorten the getmessage and processMessage functions...
>
> One very common technique, is inside the algorithms, query if they are
> allowedToRun();
>
> Ie..
>
> HelperThread::getmessage()
> {
> if( !allowedToRun() ) return;
> step1();
> if( !allowedToRun() ) return;
> step2();
> if( !allowedToRun() ) return;
> step3();
> }
>
> And the same for processMessage()..
>
> But at some point you will get down to a 3rd party library call, which
> you cant make any smaller... That will be the minimum wait time :(
>
> Scott
>
>
> On 6/19/10 8:02 AM, "Sarvesh Saran" <Sarvesh.Saran at synopsys.com> wrote:
>
> Hi,
>
> I have a helper thread derived from QThread which runs in a forever
> loop. Inside the loop it reads messages from a server , does some
> processing of the messages and send the message to the Main GUI thread.
>
> So the helper thread looks something like:
>
> Helperthread::run()
> {
> while(allowedToRun())
> {
> QString msg;
> getmessage(&msg); //read a message from the server
> processMessage(msg);
> }
> }
>
> Helperthread::processMessage()
> {
> //lots of case statements here….(to identify message types) and lots of
> message processing
> }
>
> //this is a public slot called by the main GUI thread
> Helperthread::setAllowedToRun()
> {
> //set the flag to false;
> }
>
> My problem is that when the main window gets a close signal, it sets the
> flag to false and has to wait for a long time for the helper thread to
> finish.
>
> i.e in the main window on close :
>
> MainWindow::closeEvent()
> {
> helperthread->setAllowedToRun(false);
> helperthread->wait(); //this takes a long time because the helper
> thread’s processMessage is quiet big and takes a long while to return.
> }
>
> Is there a way I can speed this up so that my main window does not have
> to wait for a long time for the helper thread to exit ?
>
>
> Thanks,
> Sarvesh
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list