[Qt-interest] Multithreading - yield function
Patric
userqt at gmail.com
Tue Sep 1 11:58:23 CEST 2009
Hi, msleep(1) is doing what yield should do from my point of view.
Very tricky, though...
----- Original Message -----
From: "Thomas Dähling" <t.daehling at googlemail.com>
To: "Patric" <userqt at gmail.com>
Cc: <qt-interest at trolltech.com>
Sent: Monday, August 31, 2009 11:46 PM
Subject: Re: [Qt-interest] Multithreading - yield function
> Someone please correct me if this is inherently wrong, but this is how I
> understood and used yielding so far ;-)
>
> Roughly speaking, yield() is useful in a few situations only, and mainly
> used to tell the operating system: "Hey scheduler, I am done with the work
> that I am supposed to do, you might want to give someone else execution
> time now, if you think there is someone who needs it more than me".
>
> So a typical use-case would be a system where you want to process at least
> X iterations of something within a thread (note: this is of course no
> guaranteed unless you provide some sort of blocking mechanism). There
> might be situations where said thread gets a time slice assigned to do X+N
> iterations, in that case a yield() after X iterations might be useful to
> return not-necessarily-required computation time to the scheduler.
> However, there is no guarantee that it will actually make another thread
> run - and of course there is no guarantee that you will get the X
> iterations done (since both parameters are almost completely out of your
> control).
>
> /Thomas
>
> Patric schrieb:
>> I will consider that, I don't have much experience with threads.
>>
>> One thing I don't understand, why there would be a function like yield
>> that don't always work. What is the reason such a function to exist if
>> it's not good to use it.
>> Sorry if my questions are obvious or something like that. :)
>>
>> Regards,
>> Patric
>>
>>
>> ----- Original Message -----
>> From: "Andreas Pakulat" <apaku at gmx.de>
>> To: <qt-interest at trolltech.com>
>> Sent: Monday, August 31, 2009 9:42 PM
>> Subject: Re: [Qt-interest] Multithreading - yield function
>>
>>
>>> On 31.08.09 21:09:12, Patric wrote:
>>>> And how do you know that it didn't yield?
>>>>
>>>> Yielding execution means allowing other threads to execute, while the
>>>> calling
>>>> thread is suspended. Eventually, however, the calling thread will
>>>> resume
>>>> working. So the "some other code" line *will* be executed, eventually.
>>>>
>>>> Anyway, whether the yielding actually does anything depends on the
>>>> operating
>>>> system and the scheduling priorities of the runnable threads. Like
>>>> Thomas
>>>> said, if there are no threads waiting to be executed, there will be no
>>>> yielding. But even if there are other threads waiting, they may be of
>>>> lower
>>>> priority, so yielding will do nothing. You may have to exhaust your
>>>> timeslice
>>>> instead.
>>>>
>>>> Finally, why do you need to yield? It's just a hint to the operating
>>>> system.
>>>> It may decide to ignore it.
>>>>
>>>>
>>>> ----------------------------------------------------------------------------------
>>>> Hi Thiago,
>>>> I'm using the debugger with multiple breakpoints and because of that I
>>>> know
>>>> if it's yielding or not. By default all threads priorities should be
>>>> equal.
>>>> I'm sure there is one thread that is waiting.
>>>>
>>>> I need to yield it because my logic requires it. I'm using queued
>>>> connections here and it's very important to know that the destination
>>>> slot
>>>> is emitted before the thread continues.
>>> Then either don't use queued connections but direct ones, or use the
>>> usual thread-communication mechanisms to make your thread stop at that
>>> point until the receiving thread is done with the slot. You could do
>>> this for example with a QWaitCondition.
>>>
>>> Andreas
>>>
>>> --
>>> You will become rich and famous unless you don't.
>>> _______________________________________________
>>> Qt-interest mailing list
>>> Qt-interest at trolltech.com
>>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>>
>>
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
>>
>
More information about the Qt-interest-old
mailing list