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
  опции профиля:
сообщение 9.1.2015, 17:49
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Вот полистал API, обратил внимание на функцию в разделе Creating and managing client threads:

Цитата
int jack_client_create_thread    (    jack_client_t *     client,
jack_native_thread_t *     thread,
int     priority,
int     realtime,
void *(*)(void *)     start_routine,
void *     arg 
)

Create a thread for JACK or one of its clients. The thread is created executing start_routine with arg as its sole argument.

Parameters:
client the JACK client for whom the thread is being created. May be NULL if the client is being created within the JACK server.
thread place to return POSIX thread ID.
priority thread priority, if realtime.
realtime true for the thread to use realtime scheduling. On some systems that may require special privileges.
start_routine function the thread calls when it starts.
arg parameter passed to the start_routine.
Returns:
0, if successful; otherwise some error number.


но пока не придумал как использовать и надо ли.

Сообщение отредактировал mezmay - 9.1.2015, 17:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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 Текстовая версия Сейчас: 29.5.2025, 22:02