On Fri, Jun 21, 2013 at 1:36 PM, francois cellier <f_cell...@yahoo.fr>wrote:
> Dear all, > > Even if I know that it can be dangerous to terminate a thread, I need to > do it for my application. > The function that run into the thread is like a long linear sequence of > code that has not been designed in a signal/slot way. Moreover, in my > thread, I need an eventloop as I use in it some TCP or UDP Qt sockets. > > I have tried the worker approach with the following code and I did not > find a way to terminate the thread : > > For my thread class : > > 1. ThreadEx::ThreadEx(QObject <http://qt-project.org/doc/QObject.html> > *parent) : > 2. QThread <http://qt-project.org/doc/QThread.html>(parent) > 3. { > 4. } > 5. > 6. void ThreadEx::run() > 7. { > 8. QThread <http://qt-project.org/doc/QThread.html>:: > setTerminationEnabled(true); > 9. exec(); > 10. } > > > > For my worker class: > > 1. > ObjectInThread::ObjectInThread(QObject<http://qt-project.org/doc/QObject.html> > *parent) : > 2. QObject <http://qt-project.org/doc/QObject.html>(parent) > 3. { > 4. } > 5. > 6. > 7. void ObjectInThread::run() > 8. { > 9. int compteur = 0; > 10. //here i am using a loop instead of the long linear flow but it > is not a loop in the real code > 11. while(1) > 12. { > 13. qDebug() <<compteur; > 14. compteur++; > 15. Sleep(1000); > 16. } > 17. } > > You use a condition variable in your loop here, which will exit out of the run() function. This variable can be set from your stop() slot (protected by a mutex if needed). In your main(GUI) thread you can wait for your worker thread to exit: m_thread->quit(); m_thread->wait(); HTH, -mandeep This should cleanly exit the thread. > Moreover I tried the other way of using QThread that consists in > inheriting the QThread class and overriding the run method with the code : > > void ThreadEx::run() > { > int compteur = 0; > while(1) > { > qDebug() <<compteur; > compteur++; > sleep(1); > } > } > > In that case terminate works but I do not have an eventloop as I did not > call the exec method. > > Is this the expected behaviour ? > > I am using Qt5.1 on centOS / RedHat 6.2. I have also tried this on Windows > with no more success. > > Thanks for your help, > François > > > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest > >
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest