6

La funzione che desidero accodata non richiede parametri. Cosa devo passare come paramContext? Passando in NULL viene generato l'errore di compilazione "Uso non valido di espressioni void". Non voglio aggiungere un parametro alla mia funzione solo per renderlo compilabile - come faccio a farlo funzionare?Come usare dispatch_async_f?

Mac OS X Snowleopard, Xcode 3.2.6 con Objective-C

risposta

2

È necessario avvolgere il funziona in qualche modo. Il modo più semplice è in realtà da usare dispatch_async() invece, come in

dispatch_async(queue, ^{ myFunc() }); 
11

Mentre si può semplicemente passare 0/NULL per l'argomento contesto, dispatch_async_f() prende void (*)(void*) come parametro funzione, non si può passare una funzione che non accetta argomenti.

è necessario o modificare la funzione di prendere un parametro void*:

void func(void*) {} 

... o, se non è possibile, avvolgerlo:

void orig(void) {} 
void wrapper(void*) { orig(); } 

// ... 
dispatch_async_f(queue, 0, &wrapper);