[libdispatch-dev] Regarding dispatch_get_main_queue() and the thread it is actual executing on

Marius Zwicker marius at mlba-team.de
Tue Apr 19 11:04:31 PDT 2011


Am 19.04.2011 um 18:27 schrieb Dave Zarzycki:

> 
> On Apr 19, 2011, at 9:09 AM, Dave Zarzycki wrote:
> 
>> On Apr 19, 2011, at 8:07 AM, Marius Zwicker wrote:
>> 
>>> I thought the main queue is available as a mean to be sure some blocks execute on the main thread (e.g. when updating the GUI is only possible while being on the main thread).
>> 
>> 
>> Marius,
>> 
>> That is only true if-and-only-if GCD is working in compatibility mode with Cocoa GUI logic, which for legacy reasons is bound to the main thread. If dispatch_main() is called, then GCD turns the main queue into a normal serial queue, with all of the performance advantages thereof.
> 
> P.S. – This is covered in the dispatch_main() man page:
> 
> COMPATIBILITY
>      Cocoa applications need not call dispatch_main().  Blocks submitted to
>      the main queue will be executed as part of the "common modes" of the
>      application's main NSRunLoop or CFRunLoop.  However, blocks submitted to
>      the main queue in applications using dispatch_main() are not guaranteed
>      to execute on the main thread.

Thanks a lot for the information. I will try to implement similar functionality when using gui frameworks needing a "real" main thread as well. I assume the portions you were talking about can be found when searching for the DISPATCH_COCOA_COMPAT macro.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/libdispatch-dev/attachments/20110419/a326e881/attachment-0001.html>


More information about the libdispatch-dev mailing list