Hi,

This was my case, but after a careful study of how the event loop and
queued signal/slot connection works, I figured it out and everything works
cleanly now.
It's easy to have this issue, as if you ask the thread to quit via a
signal/slot, you have to ensure that nothing is destroyed or blocked.


For the non-eventloop threads, I just use a quit flag as mentionned, it
works perfectly.

For the eventloop/QObject-worker threads, for instance, I have a
RenderClient, which creates a QThread, a RenderClientPrivate, and makes the
RenderClientPrivate run in the QThread. The RenderClient is then a wrapper
interface for controlling the RenderClientPrivate from the main thread.

Here are definitions/initializations:

RenderClient::RenderClient(QObject * parent)

        : QObject(parent), state(Idle)

{

        //Create a thread

        clientThread = new QThread(this);


        //Create a RenderClientPrivate and move it to the new thread

        RenderClientPrivate * clientPrivate = new RenderClientPrivate();

        clientPrivate->moveToThread(clientThread);


        //Destroy the renderer object when the threads exits from event loop

        connect(clientThread, SIGNAL(finished()), clientPrivate, 
SLOT(deleteLater()));

}



RenderClient::~RenderClient(){  debug("RenderClient : destroyed");
        //Ensure renderThread finishes its execution as it will be deleted
(child) if(clientThread->isRunning())   {               clientThread->quit();   
        //When
the thread emits finished(), the RenderClientPrivate object will be
deleted, and wait() will
return          if(!clientThread->wait(30000))          {                       
warning("RenderClient::~RenderClient
: thread timeout, forced thread to
terminate");                    clientThread->terminate();              }       
}}


That way, the terminate() is never called, and everything gets
destroyed properly.



just to put in my 2 windows cents:

> sometimes my threads even don't stop when i quit() them and a wait() waits
> forever...
>
> so terminate is my only chance for this.
>
>
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to