我的示例代码使用snd_seq_queue_status_get_tick_time()
来检查正在运行的队列。但结果是它总是报告零滴答时间。
#include <stdio.h>
#include <alsa/asoundlib.h>
int queue;
snd_seq_t *seq_handle;
snd_seq_tick_time_t current_tick;
snd_seq_queue_status_t *status;
int main (int argc, char **argv) {
snd_seq_open(&seq_handle, "default", SND_SEQ_OPEN_INPUT | SND_SEQ_OPEN_OUTPUT, 0);
queue = snd_seq_alloc_queue( seq_handle );
fprintf(stderr,"queue id=%d\n", queue);
snd_seq_start_queue( seq_handle, queue, NULL );
for(int i=0;i<4;i++) {
snd_seq_queue_status_malloc(&status);
snd_seq_get_queue_status(seq_handle, queue, status);
current_tick = snd_seq_queue_status_get_tick_time(status);
snd_seq_queue_status_free(status);
fprintf(stderr,"tick=%d\n", current_tick );
sleep(1);
}
snd_seq_stop_queue( seq_handle, queue, NULL );
snd_seq_free_queue( seq_handle, queue );
return 0;
}
答案 0 :(得分:0)
如/proc/asound/seq/queues
所示,队列从未启动过。
snd_seq_start_queue()
将队列启动事件放入本地缓冲区;要实际将所有缓冲的事件发送到内核,您必须调用snd_seq_drain_output()
:
snd_seq_start_queue( seq_handle, queue, NULL );
snd_seq_drain_output( seq_handle );