プロが教えるわが家の防犯対策術!

マイクロ秒で精度が出るタイマーってご存知ではないでしょうか?
ご存知ならご教授おねがいします。

・環境
OS:XP
使用言語:C、C++
その他:API32使用

よろしくお願いします。

A 回答 (3件)

たとえタイマーがマイクロ秒単位の精度が出たとしてもマルチタスクOSであるXPが勝手に一定時間ごとにタスクを切り替えるので意味ないと思いますが?


標準的なWindowsにはOSの制約から使い物になるマイクロ秒単位のタイマーは無いと思います。

PerformanceCounterを使っても昨今の動的にクロックをブーストするCPUやマルチコアCPUのお陰でまともに計測できませんし。

なぜ必要なのかを、まず説明してもらうと答えが得られやすいと思います。
    • good
    • 1
この回答へのお礼

ご返事ありがとうございます。

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

お礼日時:2011/04/20 11:21

Win32のQueryPerformanceCounterをつかうしかないかな?


http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

URLを参考に自分でも調べてみようと思います。

ありがとうございました。

お礼日時:2011/04/20 11:23

>実は業務で連続的に16bitのデータを送る通信システムを作成しているのですが、その送信するデータとデータの間のインターバル的な時間をマイクロ秒単位で管理したいのです。


>守秘義務が絡むのであまり詳しくお話できなくて申し訳ありません。。。

インターバルタイムが最低限の時間(オーバーを許容)なら問題ないと思いますが、そのインターバルタイムを死守しないとマズイならWindowsOSでは無理ですので、別のOSで特にリアルタイム性がメインのリアルタイムオペレーティングシステム(RTOS)を捜すべきだと思います。
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%82%A2% …

インターバルタイムのオーバーが許容されても、QueryPerformanceCounterとPerformanceCounterは最近のCPUのターボ・ブーストなどのためで不正確になっています。
ターボ・ブーストとは。
http://www.pasonisan.com/customnavi/cpu_corei/10 …
最近のCPUの場合はこのターボ・ブーストの動作状況次第でQueryPerformanceCounterの値が実際の経過時間とズレてしまうのです。
なので、ブーストしないCPUなどの選択も考えないといけないでしょう。

QueryPerformanceCounterを実時間計測には使えない
http://d.hatena.ne.jp/shiku_otomiya/20100218/p1

あるいは、タイマカウントーを外部のマイコンに任せるとか通信自体を外部のマイコンにさせるとかすれば正確な動作は期待できます。
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。

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

ありがとうございました。

お礼日時:2011/04/20 17:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!