The function that I want queued takes no parameters. What do I pass in as paramContext
? Passing in NULL generates the compile error "Invalid use of void expression". I do not want to add a parameter to my function just to make it compile - how do I make this work?
Mac OS X Snowleopard, Xcode 3.2.6 with Objective-C
When using dispatch_async for a background queue, GCD (Grand Central Dispatch) will ask the kernel for a thread, where the kernel either creates one, picks an idle thread, or waits for one to become idle. These threads, once created, live in the thread pool.
Submits a block for asynchronous execution on a dispatch queue and returns immediately.
An object that manages the execution of tasks serially or concurrently on your app's main thread or on a background thread.
A dispatch queue that is bound to the app's main thread and executes tasks serially on that thread. dispatch_queue_global_t. A dispatch queue that executes tasks concurrently using threads from the global thread pool.
While you can just pass 0
/NULL
for the context argument, dispatch_async_f()
takes void (*)(void*)
as the function parameter, you can't pass it a function that takes no arguments.
You need to either change your function to take a void*
parameter:
void func(void*) {}
... or, if you can't, wrap it:
void orig(void) {}
void wrapper(void*) { orig(); }
// ...
dispatch_async_f(queue, 0, &wrapper);
You need to wrap the function somehow. The easiest way is actually to use dispatch_async()
instead, as in
dispatch_async(queue, ^{ myFunc() });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With