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

Dave Zarzycki zarzycki at apple.com
Tue Apr 19 09:27:44 PDT 2011


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/libdispatch-dev/attachments/20110419/04ac2720/attachment.html>


More information about the libdispatch-dev mailing list