crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

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 и поток обработки звука. Как ясно из первого сообщения, в потоке обработки звука нельзя пользоваться мьютексами и т.д. И есть как минимум пять переменных :

int shift_left;
float volume_left;
float volume_right
Filter *filter_left;
Filter *filter_right;

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


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.5.2025, 17:17