#macos #cocoa #core-video
#macos #какао #ядро-видео
Вопрос:
Я анимирую переменную, используемую CVDisplayLink
в macOS, и мне любопытно, есть ли какая-либо причина не использовать dispatch_sync
поток ссылки отображения (предполагая, что я «управляю» только одной анимацией на ссылку отображения). Кто-нибудь знает?
Кажется, все работает нормально. Я попробовал dispatch_async
сначала (в основной поток, кстати), и я заметил, как кадры будут пропущены из-за слишком медленного переключения потоков, я думаю.
При использовании dispatch_sync
фреймы не пропускаются, но (конечно) время между «тиками» отображения ссылки увеличилось. Я полагаю, что это не имеет большого значения, поскольку ссылка на отображение будет ждать до следующего vsync, прежде чем снова поставить галочку.
Я думаю, в любом случае, будут случаи, когда отображение обновляется до того, как основной поток сможет обновиться в ответ на ссылку отображения, но мне все еще интересно, лучше ли один подход, чем другой. Спасибо!
PS: Может быть, использование a NSTimer
было бы лучше? Поскольку это позволило бы мне выполнять непосредственно в основном потоке, вместо использования GCD из другого потока. Я предполагаю, что vsync не удастся, но idk.
Комментарии:
1. Хм… Я думаю, что нашел свой ответ. Вызов
CVDisplayLinkStop
из основного потока приводит к взаимоблокировке при использованииdispatch_sync
.2. Кажется неправильным говорить, но похоже, что нет способа согласовать с vsync в основном потоке (по крайней мере, на macOS).
3. В случае анимации, похоже, что «источники отправки» являются предпочтительным способом реагирования в основном потоке, поскольку события объединяются.