• ベストアンサー

マイクロ秒で精度が出るタイマー

マイクロ秒で精度が出るタイマーってご存知ではないでしょうか? ご存知ならご教授おねがいします。 ・環境 OS:XP 使用言語:C、C++ その他:API32使用 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

>実は業務で連続的に16bitのデータを送る通信システムを作成しているのですが、その送信するデータとデータの間のインターバル的な時間をマイクロ秒単位で管理したいのです。 >守秘義務が絡むのであまり詳しくお話できなくて申し訳ありません。。。 インターバルタイムが最低限の時間(オーバーを許容)なら問題ないと思いますが、そのインターバルタイムを死守しないとマズイならWindowsOSでは無理ですので、別のOSで特にリアルタイム性がメインのリアルタイムオペレーティングシステム(RTOS)を捜すべきだと思います。 http://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0 インターバルタイムのオーバーが許容されても、QueryPerformanceCounterとPerformanceCounterは最近のCPUのターボ・ブーストなどのためで不正確になっています。 ターボ・ブーストとは。 http://www.pasonisan.com/customnavi/cpu_corei/10tuboboost.html 最近のCPUの場合はこのターボ・ブーストの動作状況次第でQueryPerformanceCounterの値が実際の経過時間とズレてしまうのです。 なので、ブーストしないCPUなどの選択も考えないといけないでしょう。 QueryPerformanceCounterを実時間計測には使えない http://d.hatena.ne.jp/shiku_otomiya/20100218/p1 あるいは、タイマカウントーを外部のマイコンに任せるとか通信自体を外部のマイコンにさせるとかすれば正確な動作は期待できます。

shogo5121
質問者

お礼

ご返事ありがとうございます。 どうやらWindowsOS単体では実装は難しそうですね。。。 ある程度のオーバーは許容範囲なので現状のままで行きたいと思います。 それでも厳しくなりましたら教えていただいたURLを参考に、機材、環境レベルでアプローチしてみたいと思います。 ありがとうございました。

その他の回答 (2)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

Win32のQueryPerformanceCounterをつかうしかないかな? http://support.microsoft.com/default.aspx?scid=kb;en-us;306979

shogo5121
質問者

お礼

ご返事ありがとうございます。 URLを参考に自分でも調べてみようと思います。 ありがとうございました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

たとえタイマーがマイクロ秒単位の精度が出たとしてもマルチタスクOSであるXPが勝手に一定時間ごとにタスクを切り替えるので意味ないと思いますが? 標準的なWindowsにはOSの制約から使い物になるマイクロ秒単位のタイマーは無いと思います。 PerformanceCounterを使っても昨今の動的にクロックをブーストするCPUやマルチコアCPUのお陰でまともに計測できませんし。 なぜ必要なのかを、まず説明してもらうと答えが得られやすいと思います。

shogo5121
質問者

お礼

ご返事ありがとうございます。 実は業務で連続的に16bitのデータを送る通信システムを作成しているのですが、その送信するデータとデータの間のインターバル的な時間をマイクロ秒単位で管理したいのです。 守秘義務が絡むのであまり詳しくお話できなくて申し訳ありません。。。

関連するQ&A

専門家に質問してみよう