PortAudio의 PaStreamFinishedCallback
에서 어떤 작업이 안전한지 알고 싶습니다. 일반적으로 재생을 위해 PaStreamCallback
에서 차단할 수있는 작업을 시도하는 것은 좋지 않습니다. 사용자 또는 다른 응용 프로그램의 오디오 스트림에서 팝/글리치가 발생할 수 있기 때문입니다. PaStreamFinishedCallback
에도 동일한 제한 사항이 적용됩니까? 그 콜백이 OS의 오디오 스레드에서 호출되는지 궁금합니다.PortAudio의 PaStreamFinishedCallback에 대한 안전한 작업
/paAbort
콜백이 반환 될 때까지 차단되지만 정지를 유발하지 않고 차단하는 기능이 있습니까? 그게 내가 정리할 수있는 실을 가지고 있기 때문에 실제로는 내 사용에 이상적입니다. 내 스레드에 내 콜백 신호를 보내서이 작업을 완료 할 수 있다는 것을 알았습니다. 스레드가 Pa_StopStream
을 호출 할 수 있지만 무거운 느낌이 들었습니다.
편집 : 내 사용에 대해 좀 더 많은 컨텍스트를 제공하기 위해 일부 PCM을 보유하고 버퍼에서 공간을 사용할 수있을 때 신호를 보내려면 pthread condvar를 사용하는 링 버퍼가 있습니다. 하나의 쓰레드가이 링에 쓴 다음 PaStreamCallback
이 다른 쪽에서 읽습니다. 일이 끝나면 작성자는 링에 닫힌 플래그를 설정하고 콜백은 남아있는 것이 무엇이든 배수합니다. 내 반지가 빠져 나가고 PortAudio가 비워 졌는지 확인하고 싶습니다. 콜백은 링이 끊어지는 것을 아는 유일한 장소이므로 paComplete
을 반환하는 것이 적절하다고 느낍니다. 하지만 내 반지를 할당 해제하는 것이 좋다는 것을 알기 위해서는 어떤 방법이 필요합니다.