このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com ロゴ
作成 December 25, 2017、最終更新 May 15, 2021(様式変更)
トップページ > Android 開発トップ > C/C++ による経過時間の検査
line
Android 開発
line

ここでは、C/C++ で、ある時点からの経過時間を計測する方法について検討します。

Windows では、システム時間をミリ秒単位の DWORD ( Double-Word、WORD サイズの2倍の整数値です。 ) 値で返してくれる GetTickCount 関数を使えば、 計測開始、計測終了を簡単に比較できますので、経過時間がミリ秒単位で計算できます。

(精度は低いものの)SetTimer 関数でタイマーを設定しておけば、その時間ごとに WM_TIMER メッセージが送信されます。

ここでは、C/C++ で、これに代わる、簡単に扱える関数について、検討しています。

▼ セクション一覧

C/C++ による経過時間の検査
使用しているC/C++環境(共通)

ご利用に際しては、必ずプライバシーポリシー(免責事項等)をご参照ください。
また、本サイトが初めての方は、まずこのページの注意事項をご覧ください。

C/C++ による経過時間の検査

投稿 December 25, 2017, 最終更新 July 23, 2018(様式変更)

Windows API では、OS起動から経過した時間を DWORD 値(ミリ秒)で取得できる GetTickCount 関数が用意されており、 また、必ずしも正確ではないものの、 タイマーをセット ( SetTimer 関数が用意されています。 ) しておけば、定期的に WM_TIMER ( WM_ で始まるシンボルは、Window Message を意味します。 ) メッセージが送られるので、 MFC なら OnTimer 関数が呼び出されますから、経過時間をチェックするのは簡単です。

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 のような処理を 実装できるかと思います。

▲ページ先頭へ

使用しているC/C++環境(共通)

投稿 December 25, 2017, 最終更新 May 15, 2021

Visual Studio 2015 でプロジェクトを開いているとき、「プロジェクト」メニューの一番下、「<プロジェクト名>.NativeActivity のプロパティ」で、STLport を選択しています。

STLport を選択

【 2021 年 5 月 15 日追記 】
新しい開発環境では LLVM のみ選択可能ですが、特に違いはないと思います。

▲ページ先頭へ
line
関連トピックス
line

C/C++ による文字列操作 CString を代用

Android ネイティブアプリ開発で、文字列を加工するためのクラスを作成しました。

android_main 関数のメインループ処理

ネイティブアプリ プロジェクトの基本、android_main 関数について検討しています。

line
その他のおすすめ
line

Android 開発に関する記事をまとめた Android 開発トップ もご覧ください。

JavaScriptが無効です
▲ページ先頭へ


© 2017-2021 StraightApps.com 無断転載を禁じます。No reproduction without permission.