On Sat, Sep 29, 2012 at 11:04 AM, João Abecasis <j...@abecasis.name> wrote: > João Abecasis wrote: >> Chris Meyer wrote: >>> The documentation promotes the idea of using 'moveToThread' as a >>> preferred threading mechanism. However, we've found that moveToThread >>> is full of pitfalls. >>> >>> Particularly, an object must be deleted on the thread on which it >>> resides. This makes it difficult to manage the lifetime of objects >>> that have been moved to a thread via moveToThread. You need to >>> configure an independent mechanism to delete objects that have been >>> moved to thread (i.e. send a signal to the thread that it's about to >>> shutdown and allow the objects to deleteLater within the thread, which >>> also implies that you need to keep track of the objects that are >>> within the thread, which somewhat defeats the apparent simplicity of >>> moveToThread). Also, you cannot use the finished signal from the >>> thread since the thread will already be gone by then. >> >> Since Qt 4.8 you can connect QThread::finished to QObject::deleteLater >> and it should do the right thing in the appropriate thread. > > For reference, here's a link to the commit implementing this: > > > http://qt.gitorious.org/qt/qt/commit/0c643b179c5154c50b61dba421016b7b48794720 >
This looks like a great change to have. In any case, the overall problem, solution, and in what version it was implemented needs to be documented in the QThread documentation. I missed this commit-log-message-as-documentation before. >>> The bug will show up intermittently and differently on various >>> platforms and is difficult to debug if you don't know about the >>> problem. You'll just end up with spurious crashes (typically at quit >>> time), especially for networking objects. > > Cheers, > > > João _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development