Windows では、システム時間をミリ秒単位の
(精度は低いものの)SetTimer 関数でタイマーを設定しておけば、その時間ごとに WM_TIMER メッセージが送信されます。
ここでは、C/C++ で、これに代わる、簡単に扱える関数について、検討しています。
ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。
また、本サイトが初めての方は、まずこのページの注意事項をご覧ください。
投稿 December 25, 2017, 最終更新 July 23, 2018(様式変更)
Windows API では、OS起動から経過した時間を DWORD 値(ミリ秒)で取得できる GetTickCount 関数が用意されており、
また、必ずしも正確ではないものの、
C/C++ では、clock_gettime 関数に CLOCK_MONOTONIC を渡すと、単調増加クロックの値を取得できます。 取得できるのは timespec 構造体で、秒とナノ秒の2変数で構成されています。
1ms(ミリ秒)= 1,000μs(マイクロ秒)= 1,000,000ns(ナノ秒)
ですから、
timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
のようにして、ミリ秒単位の値を取得できました。
Windows プログラムな私としては、ミリ秒がいちばん扱いやすいので、
time_t getTickCount(void)
として関数を定義し、新しいネームスペースに追加して、Windows APIのように使えるようにしました。
時間の計測を開始したい処理で、この関数で値を取得しておいて、計測を終了したいタイミングで取得しておいた値を引けば、 経過時間がわかります。また、Android であれば、メインループでチェックするようにすれば、WM_TIMER のような処理を 実装できるかと思います。
投稿 December 25, 2017, 最終更新 May 15, 2021
Visual Studio 2015 でプロジェクトを開いているとき、「プロジェクト」メニューの一番下、「<プロジェクト名>.NativeActivity のプロパティ」で、STLport を選択しています。
【 2021 年 5 月 15 日追記 】
新しい開発環境では LLVM のみ選択可能ですが、特に違いはないと思います。
Android 開発に関する記事をまとめた Android 開発トップ もご覧ください。