- ベストアンサー
メトロノームが一定のリズムで鳴ってくれない
こんにちは、VBのプログラミングについて教えて下さい。 VBでメトロノームみたいなプログラムを作ろうと思い、タイマーコントロールを使って一定の間隔でWAVを鳴らすプログラムを作りました。とりあえず完成し、それなりに動くのですが、実行中に他のアプリケーションを操作すると一瞬リズムが乱れてしまいます・・・。 出来れば他のアプリケーションを操作しても、リズムが乱れないようにしたいのですが、どのような手法がありますでしょうか? どうぞ宜しくお願いします!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MMTimerに対して補足しておきます。 「Intervalプロパティに 55 以下を指定すると、正確なイベントを発生できません。」 と書かれていましたが、55というのはマシンスペックなどの環境に左右されますし 1000と設定しても実際は徐々にずれていきます。 そもそもタイマーイベント(タイマーコントロールの発生するイベント)というのは 時間を測る為のものではなく定期的に実行する為のイベントです。 通常Windowsで時間を測るにはGetTickCount()APIを使用します。 ゲームプログラミング的な手法ですが、 Timerイベントは1ms毎に実行するように設定しておき そこでGetTickCount()APIで監視すればどうでしょうか。
その他の回答 (2)
- silverjet
- ベストアンサー率66% (4/6)
プロセスの優先度は,WindowsAPIでできます. ↓(参考) http://tokyo.cool.ne.jp/kanain/APIHTM/Propri.html 加えて,タイマーにMMTimerを使えば,ほぼずれないと思います. ↓ http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/chtml/chtml.cgi?key=mmtimer
お礼
参考URLありがとうございます!早速参考にしてプログラムを修正してみようと思います。どうもありがとうございました!!
- S-Fuji
- ベストアンサー率36% (592/1624)
貴方のOSが判らないのですが。 Win2K等の場合、Ctrl+Alt+Deleteで、タスクマネージャーを起動し、「プロセス」タブの中で当該のプログラムを右クリックし、その中の「優先度の設定」で、優先度を上げてみて、如何でしょう。
お礼
ご回答ありがとうございます!OSはWIN2Kを使ってます。タスクマネージャの「優先度の設定」は知りませんでした。大変参考になりました。どうもありがとうございます!早速優先度を「高」に設定してテストしてみました。今までのように頻繁にリズムがずれることは無くなりましたが、たまに若干ずれる時があります。さらに優先度が高い「リアルタイム」も試してみたいと思います。どうもありがとうございました。
お礼
ご回答ありがとうございました。GetTickCount()APIを使うような手法もあるんですね。複数のイベントを実行する場合に使えそうです(複数の音を違うタイミングで鳴らすような場合)。大変参考になりました!どうもありがとうございます!!