Jack kit API 使用来自其(实时)线程的回调来处理音频数据:
jack_set_process_callback (client, process, 0);
...
int process(jack_nframes_t nframes, void *arg)
{
...
}
我怎样才能线程安全地将一些参数传输到这个回调(当然没有阻塞操作)?我不仅需要传输参数,还需要重新初始化音频过滤对象,因此我需要找到基于事件的解决方案。
Jack kit API 使用来自其(实时)线程的回调来处理音频数据:
jack_set_process_callback (client, process, 0);
...
int process(jack_nframes_t nframes, void *arg)
{
...
}
我怎样才能线程安全地将一些参数传输到这个回调(当然没有阻塞操作)?我不仅需要传输参数,还需要重新初始化音频过滤对象,因此我需要找到基于事件的解决方案。
在主线程中分配您的事件并使用环形缓冲区(jack/ringbuffer.h)将指向该事件的指针发送到您的音频线程。使用第二个环形缓冲区将指针发送回主线程,以便释放内存。
在http://harryhaaren.blogspot.com/2011/11/tutorial-jack-ringbuffers.html有一个很好的简单示例