Название: Синхронизация потоков: Qt + Jack API Отправлено: mezmay от Декабрь 26, 2014, 18:45 Работаю с Jack audio connection kit API, нужна обработка звука в "реальном" времени. Сама обработка делается в callback-функции, вызываемой из другого потока. Но в описании сказано, что нельзя применять длительные операции, в т.ч. мьютексы. Но как тогда работать с общими с основным потоком данными? (QReadLock - QWriteLock ?) Какие варианты?
Цитировать Код: int jack_set_process_callback ( jack_client_t * client, 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. Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: Igors от Декабрь 26, 2014, 19:10 Лучше всего lock-free, но надо знать задачу. А если нужно "в общем виде" - то атомарный лок, хотя тормоза возможны.
Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: mezmay от Декабрь 26, 2014, 20:05 Мне надо реализовать буфер задержки для одного из каналов. Ну и несколько int , float переменных передать
Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: mezmay от Декабрь 27, 2014, 06:38 Итак, у меня два потока - GUI и поток обработки звука. Как ясно из первого сообщения, в потоке обработки звука нельзя пользоваться мьютексами и т.д. И есть как минимум пять переменных :
Код: int shift_left; volume_left, volume_right - громкость каналов. GUI поток пишет значения этих переменных, поток обработки звука - читает. Как синхронизировать? Особенно интересуют объекты типа Filter... Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: Igors от Декабрь 27, 2014, 09:25 GUI поток пишет значения этих переменных, поток обработки звука - читает. Как синхронизировать? Код Правда это не обобщается на 2 и более читателей (тогда придется с atomic) Особенно интересуют объекты типа Filter... Должны полностью копироваться при создании Jack (а не только указатели)Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: Igors от Декабрь 28, 2014, 13:15 Наверное перемудрил - может здесь достаточно std::shared_ptr :)
Название: Re: Синхронизация потоков: Qt + Jack API Отправлено: kuzulis от Декабрь 28, 2014, 14:49 ИМХО, тут потоки и каллбеки вообще лишние сущности. Не верю что там нет работы с fd и прочее вместо каллбеков. :)
|