On Thursday 21 January 2016 02:37:43 Marc Mutz wrote: > On Wednesday 20 January 2016 21:52:49 Thiago Macieira wrote: > > On Wednesday 20 January 2016 21:08:07 Pau Garcia i Quiles wrote: > > > Replacing QThread with std::thread? Please don't. > > > > Unlike the containers or even futures/promises vs QtConcurrent, we can > > easily argue that QThread provides a lot more functionality than > > std::thread. In just one word: signals. > > What happened to "you're doing it wrong!"? :) AFAIU that blog post, you're > supposed to use the signals of QObjects living in that thread, not the > QThread itself.
You can use the signals and the slots of the QThread itself. The wrong part was deriving from QThread, adding slots to it and then doing moveToThread(this) so those slots got called in the thread that it manages. Other uses of QThread are fine. You can derive from it and override run. You can even add more signals to it. It's new slots that are suspicious. > And that's perfectly possible with std::thread, too: > > auto po = new ProcessingObject(); > connect(po, ...); > po->moveToThread(nullptr); // enable "pulling" moveToThread() > auto t = std::thread([po, gui = QThread::currentThread()]() { > QEventLoop loop; > po->moveToThread(QThread::currentThread()); > connect(po, ..., &loop, &QEventLoop::quit); > loop.exec(); > po->moveToThread(gui); > // or: delete po; > } > > Am I missing something? How do you interrupt the event loop from outside (QThread::quit)? You can't create that QEventLoop before the lambda because it would live in the wrong thread. You could use this: po->thread()->quit(); but note how you used QThread. If you're going to use QThread anyway, you may as well use it to start the thread. Even if you didn't do this, your example uses QThread (QThread::currentThread(), which returns a QAdoptedThread pointer). And even if you didn't moveToThread(), you created a QObject in that thread (the QEventLoop), which will create the QThreadData and the event dispatcher machinery. At that point, QThread is a simple wrapper full of convenience functions. > > We should provide QThread::makeThread() taking a lambda and some other > > niceties, though. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development