Здравствуйте, гость ( Вход | Регистрация )
|
mezmay |
27.12.2014, 6:40
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: 1
|
Работаю с Jack audio connection kit API, нужна обработка звука в "реальном" времени. Сама обработка делается в callback-функции, вызываемой из другого потока. Но в описании сказано, что нельзя применять длительные операции, в т.ч. мьютексы. Но как тогда работать с общими с основным потоком данными? Какие варианты?
Цитата int jack_set_process_callback ( jack_client_t * client, JackProcessCallback process_callback, void * arg ) Tell the Jack server to call process_callback whenever there is work be done, passing arg as the second argument. The code in the supplied function must be suitable for real-time execution. That means that it cannot call functions that might block for a long time. This includes all I/O functions (disk, TTY, network), malloc, free, printf, pthread_mutex_lock, sleep, wait, poll, select, pthread_join, pthread_cond_wait, etc, etc. Итак, у меня два потока - GUI и поток обработки звука. Как ясно из первого сообщения, в потоке обработки звука нельзя пользоваться мьютексами и т.д. И есть как минимум пять переменных : shift_left - текущая задержка левого канала, volume_left, volume_right - громкость каналов. GUI поток пишет значения этих переменных, поток обработки звука - читает. Как синхронизировать? Особенно интересуют объекты типа Filter... |
|
|
|
mezmay Сложная синхронизация 27.12.2014, 6:40
FireBlack Цитата(mezmay @ 27.12.2014, 6:40) GUI пот... 27.12.2014, 7:15
mezmay Я не управляю этим потоком, только callback задаю 27.12.2014, 8:06
mezmay Хотя можно получить posix thread id, а значит наве... 27.12.2014, 11:07
lanz Используйте например
http://qt-project.org/doc/qt-... 27.12.2014, 20:30
Iron Bug если я правильно понимаю идею, то это вообще изнач... 27.12.2014, 23:08
mezmay Цитата(Iron Bug @ 27.12.2014, 23:08) если... 9.1.2015, 15:09
mezmay Вот полистал API, обратил внимание на функцию в ра... 9.1.2015, 17:49
mezmay Не знаю как это реализовать, но правильно работать... 9.1.2015, 19:02
lanz Все верно, в потоке B устанавливаете нужный коллбэ... 10.1.2015, 13:13
mezmay Вопрос в том как сделать этот поток B. Jack работа... 10.1.2015, 15:59
lanz Не надо им управлять, вам нужно просто передавать ... 10.1.2015, 22:07
mezmay Цитаталочите структуру(например используя testAndS... 10.1.2015, 23:19
lanz Ну во первых, можно использовать обычный QMutex, я... 11.1.2015, 13:52
mezmay guard.fetchAndStoreOrdered(UNLOCKED);
Я пр... 11.1.2015, 15:11
lanz Да, она просто перезаписывает. 12.1.2015, 22:05
Iron Bug Цитата(lanz @ 11.1.2015, 15:52) это упрощ... 13.1.2015, 9:46
mezmay Цитата(Iron Bug @ 13.1.2015, 9:46) это сп... 13.1.2015, 12:25
lanz Цитата(Iron Bug @ 13.1.2015, 9:46) это не... 13.1.2015, 20:16
Iron Bug Цитата(lanz @ 13.1.2015, 22:16) Техническ... 14.1.2015, 13:39
lanz Цитатаупрощённо разницу я пояснила. если углублять... 14.1.2015, 19:58
lanz Наврал немного, QMutex под лин использует
https://... 14.1.2015, 21:14
Iron Bug я не о мьютесках писала, а о спинлоках. в них тред... 15.1.2015, 9:39
lanz Цитатая не о мьютесках писала, а о спинлоках. в ни... 16.1.2015, 9:30
Iron Bug я не буду спорить. возомжно, когда-нибудь позже ты... 16.1.2015, 23:05
lanz Цитатая просто предупредила, что спинлоки могут со... 17.1.2015, 1:49
Iron Bug Цитата(lanz @ 17.1.2015, 3:49) Цитатая пр... 18.1.2015, 11:39
lanz Цитатаобрати внимание, что на одноядерном проце ил... 18.1.2015, 12:51
Iron Bug в десятый раз: архитектура проца не зависит от оси... 19.1.2015, 13:05
lanz fence ничего не блокирует, он просто запрещает пер... 19.1.2015, 15:02
Iron Bug слушай, мне надоело тут заниматься культпросветом.... 19.1.2015, 19:15
lanz Нормально жи общались
Я привел именно этот отр... 19.1.2015, 19:46
Iron Bug Спинлок не обычный цикл. В нём часто запрещены пре... 19.1.2015, 23:21
lanz Со всем согласен, кроме вот этого
ЦитатаЭто всё ис... 20.1.2015, 13:29
Iron Bug надеюсь, ты понимаешь, что так или иначе ты всё ра... 20.1.2015, 15:59
lanz Цитатанадеюсь, ты понимаешь, что так или иначе ты ... 20.1.2015, 20:41
Iron Bug xchgX залочивает шину, вне зависимости от наличия ... 21.1.2015, 8:46
lanz Ну и пусть залочивает, выключение прерываний перед... 21.1.2015, 9:08![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 23.12.2025, 20:23 |