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

> 21 нояб. 2018 г., в 16:37, Olivier Goffart <[email protected]> написал(а):
> 
>> 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

Ok, thanks, I didn't dig that deep.

> 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.)
> 

Heh, that code looked suspicious to me:) I was wondering if I'm missing 
something but it appears that I don't

Thank's for the clarification.

>> Иван Комиссаров
>>>> 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