そこで、Cocoa アプリケーションの中心部分を再構築しました (本当にやらなければなりませんでした!)。それ以来、問題が発生しています。
簡単な概要: 私のアプリケーションは、外部タイムコードと同期するように QuickTime ムービーの再生を制御します。
したがって、外部タイムコードは CoreMIDI コールバック スレッドに到着し、1 秒あたり約 25 回アプリケーションに送信されます。その後、同期がチェックされ、必要に応じて調整されます。このチェックと調整はすべてメインスレッドで行われます。
すべての処理をバックグラウンド スレッドに配置したとしても、現在多くの GCD ブロックを使用しているため、大量の作業が必要になり、NSThread から呼び出せるように多くの関数を書き直す必要があります。それで、それが私の問題を解決するかどうかを最初に確認したいと思います。
問題
Core MIDI コールバックは常に時間内に呼び出されますが、メイン キューにディスパッチされる GCD ブロックが最大 500 ミリ秒ブロックされることがあります。それが起こった場合、同期を調整してもうまくいかないことは理解できます。理由が見つからなかったので、メインスレッドをブロックするようなことをしているのではないかと推測しています。
私は Instruments に精通していますが、メッセージが時間内に処理されない理由を確認するための適切なモードが見つかりませんでした。
誰か助けていただければ幸いです。私がそれについて何ができるかわかりません。前もって感謝します!