2016-05-14 8 views
1

現在、波形データの読み込み、波形の生成、ビート位置の計算にPocoスレッドを使用する際に問題が発生しています。私のオーディオスレッドは私のデータをストリーミングするためにRTAudioが使用するものとは異なりますので、RTAudio(オーディオミューテックスをロックする必要があります)があまりに長く待たなければmutexが長すぎないようにロックする必要があります。 ..現在起こっている。プログラムがアイドル状態であっても、これが始まります。何かをロードするように求められていません。スレッドのデバッグ時のprintfの効果

ミューテックスの取得からスレッドがブロックされている時間と、問題がどこにあるかを調べてコンソールに出力するためにロックされている時間を計るという考えがありました。これは6 printfのすべてのフレーム、毎秒60フレームの目標フレームレートを有する。

私は、コンソールに印刷を停止すると、プログラムがアイドル状態になってもバッファアンダーランは発生しないことに気がつきました。これは、printfをフレームで何度も悪化させた問題です。

私はprintfを使用できない場合、どのようにスレッドの時間を監視することができますか?

答えて

1

POSIXでは、ほとんどの標準I/O関数でスレッドセーフとアトミックが必要です。これは、同じストリーム上で動作する複数の*printfが互いにブロックすることを意味します。ロックを必要としない場合は、OS特有のノンブロッキング関数のドキュメントをチェックする必要があります。

同様の質問:stdout thread-safe in C on Linux?

関連する問題