On 21.11.18 16:26, Иван Комиссаров wrote:
Except there's possible race-condition if quit() is called before loop started, 
isn't it? At least, qthread::exec do some checks under mutex

No, QEventLoop::exec also checks for d->threadData->quitNow

The only difference would be the return code.
(And note that there is a race condition in QThread::exec, which could lead the return code to be lost if QThread::exit() is called right at the moment QThread::exec() is called.)



Иван Комиссаров

21 нояб. 2018 г., в 16:10, Olivier Goffart <[email protected]> написал(а):

On 21.11.18 15:47, Volker Hilsheimer wrote:
On 20 Nov 2018, at 14:30, Иван Комиссаров <[email protected]> wrote:
Hello, I've noticed that it would be nice to run QThread::exec() from a functor 
passed to QThread::create(). However, exec is marked as protected, thus I can't 
call QThread::currentThread()->exec().
Maybe it is worth to make exec() public method? Or make it static, like in QApp 
(is it BC?)?
This would be a nice addition to the create() method so worker objects can be 
created in a functor on stack instead of moving them to thread.

Иван Комиссаров
The reason why QThread::exec is protected so that people don’t get tempted to 
call it directly on a QThread object and expecting that the event loop is 
somehow executed in a separate thread. It is useful to generate a compile-time 
error when this is attempted:
QThread *heyNewThread = new QThread;
heyNewThread->exec();
I would rather not remove that limitation (and it would break BC on compilers 
that include the access level in the generated symbol). Making exec() public 
would indicate that the above is ok, while it actually breaks the semantics.

No need to access QThread::exec().
One can just call

   QEventLoop().exec();

And that has the same effect.

--
Olivier

Woboq - Qt services and support - https://woboq.com - https://code.woboq.org
_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to