C++
 Computer >> コンピューター >  >> プログラミング >> C++

LinuxでC++を使ってミリ秒単位の時間を取得する方法

この記事では、Linux環境のC++で現在時刻やプログラムの経過時間をミリ秒単位で取得する方法を解説します。

timeval構造体とgettimeofday()関数

Linuxでは、<sys/time.h>ヘッダーに用意されているgettimeofday()関数とtimeval構造体を利用することで、高精度な時刻を取得できます。timeval構造体は主に次の2つのメンバーを持っています。

  • tv_sec: 1970年1月1日(エポック)からの経過秒数
  • tv_usec: 秒未満のマイクロ秒部分

処理の開始時と終了時にそれぞれ時刻を取得し、その差分を計算することで、ミリ秒単位の経過時間を求めることができます。

サンプルコード

#include <sys/time.h>
#include <iostream>
#include <unistd.h>
using namespace std;

int main() {
    struct timeval start_time, end_time;
    long milli_time, seconds, useconds;

    // 開始時刻を取得
    gettimeofday(&start_time, NULL);

    cout << "Enter something: ";
    char ch;
    cin >> ch;

    // 終了時刻を取得
    gettimeofday(&end_time, NULL);

    // 差分を計算してミリ秒へ変換
    seconds = end_time.tv_sec - start_time.tv_sec;   // 秒の差分
    useconds = end_time.tv_usec - start_time.tv_usec; // マイクロ秒の差分
    milli_time = ((seconds) * 1000 + useconds / 1000.0);

    cout << "Elapsed time: " << milli_time << " milliseconds\n";
    return 0;
}

実行結果

Enter something: h
Elapsed time: 2476 milliseconds

コードのポイント

  • gettimeofday(&tv, NULL) を呼び出すと、現在の時刻がtimeval構造体に格納されます。
  • 終了時刻から開始時刻を引き、秒 × 1000 + マイクロ秒 ÷ 1000 という式でミリ秒に変換しています。
  • この例ではユーザーの入力待ち時間が経過時間として測定されますが、任意の処理の前後でgettimeofday()を呼び出せば、その処理にかかった時間を計測できます。

補足:std::chronoによる移植性の高い計測

C++11以降では、OSに依存しない標準ライブラリ<chrono>を使う方法も推奨されています。以下のように書くことで、Linux以外の環境でも同じコードが動作します。

#include <iostream>
#include <chrono>
using namespace std;
using namespace chrono;

int main() {
    auto start = steady_clock::now();

    // 計測したい処理

    auto end = steady_clock::now();
    auto millis = duration_cast<milliseconds>(end - start).count();
    cout << "Elapsed time: " << millis << " milliseconds\n";
    return 0;
}

Linux固有のAPIを使う場合はgettimeofday()、移植性を重視する場合はstd::chronoを選ぶとよいでしょう。

  1. C++プログラムから外部アプリケーション(メモ帳など)を起動する方法

    この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<

  2. LinuxでVirtual Machine Managerを使い始める方法|インストールから仮想マシン作成まで徹底解説

    Virtual Machine Manager(virt-manager)は、Linuxデスクトップで利用できるハイパーバイザーの中でも特に評価が高いソフトウェアの一つです。QEMU/KVMを基盤とした仮想化技術を採用しており、高いパフォーマンスと充実した機能を両立しています。このツールを活用すれば、Linuxデスクトップ上の仮想化環境を一段上のレベルへ引き上げることができます。 Virtual Machine Managerのインストール方法 インストールはとても簡単で、ターミナルで以下のコマンドを実行するだけです。 # Debian/Ubuntuの場合 sudo apt instal