Как использовать dispatch_async_f? - PullRequest
       2

Как использовать dispatch_async_f?

6 голосов
/ 17 февраля 2012

Функция, которую я хочу поставить в очередь, не принимает параметров. Что я передаю как paramContext? Передача в NULL генерирует ошибку компиляции "Недопустимое использование выражения void". Я не хочу добавлять параметр в свою функцию просто для ее компиляции - как мне заставить это работать?

Mac OS X Snowleopard, Xcode 3.2.6 с Objective-C

Ответы [ 2 ]

11 голосов
/ 17 февраля 2012

Хотя вы можете просто передать 0 / NULL в качестве аргумента контекста, dispatch_async_f() принимает void (*)(void*) в качестве параметра функции, но вы не можете передать ему функцию, которая не принимает аргументов.

Вам нужно либо изменить свою функцию, чтобы получить параметр void*:

void func(void*) {}

... или, если вы не можете, обернуть его:

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

// ...
dispatch_async_f(queue, 0, &wrapper);
2 голосов
/ 17 февраля 2012

Вам нужно как-то обернуть функцию.На самом деле самый простой способ - вместо этого использовать dispatch_async(), как в

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