現在Visual Studio2008でソフト開発を行っているのですが、Windowsで、現在時刻の「ナノ秒」を取得する方法はありますでしょうか?
開発言語はC言語です
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
Windows APIで取得できるシステム時刻の最小単位は100ナノ秒なので、ナノ秒は取得できません。ナノ秒単位にしたければ、取得した値を100倍する必要があります。
100ナノ秒単位でシステム時刻を取得するAPI関数には、GetSystemTimeAsFileTime
またはGetSystemTimePreciseAsFileTime
があります。
GetSystemTimePreciseAsFileTime
の方がなんとなく正確な気がしますが、Windows 8で追加された関数なので、それ以前のWindowsでは使えません。また、Visual Studio 2008はWindows 8に未対応なので、そもそも使えないかもしれません(SDKを別途インストールすれば使えると思いますが、それをするぐらいならVisual Studioのバージョンを上げた方が良いでしょう)。
投稿2016/08/23 05:58
総合スコア5938
0
1ナノ秒は、1秒の10億分の1の単位です。
一方、パソコンのCPUは1~3GHzぐらいのクロックで動作しています。1GHzは1秒間に10億回振動する周波数です。1つのクロックで、CPUの1つの(極単純な)動作が行われます。
CPUは1ナノ秒の間に単純な動作を1~3回しか出来ないのですから、現在時刻の「ナノ秒」を取得する事は不可能です。
システム時刻の最小単位が100ナノ秒なのは、現在のCPUの性能を考えると妥当なのではないでしょうか。
投稿2016/08/23 07:20
総合スコア6915
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こちらのページが参考になりそうです。
http://www.bugbearr.jp/?C%E8%A8%80%E8%AA%9E%2F%E6%97%A5%E6%99%82
clock_gettime関数一択ですね。
Windows環境で使えるのかはわかりませんが、試してみてください。
投稿2016/08/23 05:15
総合スコア16998
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
高分解能パフォーマンスカウンタの現在の値を取得する QueryPerformanceCounter が使えるなら一応ナノ秒(分解能 2 ナノ秒)に対応しますが、デスクトップ版ウィンドウズはリアルタイム OS ではないのでどのみち誤差が生まれあまり意味はないでしょう。リアルタイム OS と銘打たれた CE でもミリ秒レベルだそうです。
投稿2016/08/23 05:09
編集2016/08/23 07:54総合スコア28660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Windowsでの精度を計ったサイトが有りました。http://vivi.dyndns.org/tech/cpp/timeMeasurement.html
単位的にはナノ秒までの数値が返ってきても、精度的には1マイクロ秒程度が限界だと思います。
投稿2016/08/23 08:55
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
System.Diagnostics.Stopwatch();
投稿2016/08/23 04:54
総合スコア367
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。