プロが教える店舗&オフィスのセキュリティ対策術

時間を測る関数について質問します。
実際の時間を測れて精度がtime()より良いものはありますか?

A 回答 (5件)

ちなみに、リアルタイムOSと言われるμTronも、結局のところOSの即応性が高いだけで、リアルタイムではありません。


最近はLinuxもリアルタイムOSと呼ばれていますが。。。

地点Aから5ミリ秒後にこれを実行!

ってやっても、関数のオーバヘッドや命令文のオーバヘッド、命令の実行時間、そのたもろもろの要因により、そのように実行できる保証はありません。

C言語でもこれをすることは不可能ではありませんが、現実的ではありません。
もちろんアセンブラを使っても同じことが言えます。


メインメモリへのアクセス速度、CPUの実行速度なんてスーパースケラーの今のCPUでは計算で求めれるものではありません。
(Intelのx86系CPUはもちろんARM系CPUでも)
割り込みの有無やWDTなど様々な要因があります。
HDDなどへのメモリスワップがあったらさらに実行時間を指定することはほぼ不可能です。

本気でするならCPUの選別から始める感じでハードウェアを組み立てですかねー
不可能ではないと思いますが、現実的ではないと思います。

正確な時刻を保持しているとされている原子時計ですら誤差がありますからね。
何千年に1秒レベルではありますが。
    • good
    • 0

実際の時間って何ですか?


No.3さんが言われているように、ハードウェアの問題であってソフトウェアの問題ではありません。

基本的にどんなハードウェアでも水晶発振を分周して時刻を演算しているため、正確な時間を刻むことはできません。
どういうことかというと、誤差があっても誤差を認識することができないからです。

そのため、インターネット上ではNTPサーバなどの時刻サーバが存在するわけです。
WindowsなどのOSはマイクロソフトの時刻サーバに定期的に接続して時刻を補正しています。

携帯やスマホもそれぞれのキャリアの時刻サーバに接続していますね。

GPSシステムと接続して時刻を補正するのもありかもしれません。


ーーーーーーーーーーーーーーー
正確性というよりも、細かい単位で取得したいという意味なら、ミリ秒以下の精度はありません。
C言語というより、OSの時刻保持であったり、ハードウェアの時刻保持の単位を割ることになるので。

それより細かい精度を求めるのであれば、ハードウェアを新規で作るしかありません。

作ったとしても、それを確認する手段は、金銭的にも、正確性という意味でも現実的でないと思います。

新しいハードウェアのWDTでミリ秒以下の時刻と精度を必要とするなら別ですが。
    • good
    • 0

精度が必要なら言語でなくハードウェアに注目すべきです。


マイコンシステムなら可能ですがハードとコマンドをセットで作るしかないでしょう。
水晶→プリスケーラ→カウンタを使いその出力を割り込みで実行するようにプログラムすれば出来ます。
    • good
    • 0

そのタイトル「時間を測る C言語」で検索して、出てくるものを順番に読んでみては?



C言語標準以外にも、実行環境(OS等)依存、C言語のバージョン依存など、いろんな方法があります。
あとは、どこまでの精度を求めているかによっても使いわける必要があります。
    • good
    • 0

実行するタイミングを正しく認識していれば、精度高く計測可能です。


そんなわけでC言語そのものが高精度な時間計測には向いていません。
アセンブリ言語を組み込んでみましょう。
    • good
    • 0

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