C++ でカウントダウンタイマーを作成する

Suraj P 2023年10月12日
  1. Unix 環境でカウントダウンタイマーを作成する
  2. Windows でカウントダウンタイマーを作成する
  3. C++ でアップカウントタイマーを作成する
C++ でカウントダウンタイマーを作成する

この記事では、C++ でアップカウントタイマーとダウンカウントタイマーを作成する方法について説明します。まず、C++ でカウントダウンタイマーを作成する方法を見てみましょう。

それが機能する方法は、ユーザーからの分と秒を入力として受け取り、プログラムでループを使用して、秒を逆の順序またはカウントダウンで出力することです。

数が 1 に達するまでカウントダウンする while ループや for ループのようなループを使用できます。この中で、プログラムを 1 秒間一時停止して、変更を確認するメカニズムが必要です。

Unix ライクな環境と Windows には、プログラムを一時停止したりスリープさせたりするためのさまざまな機能(システムコール)があります。ただし、それらは同じ機能を持っています。

Unix 環境でカウントダウンタイマーを作成する

Linux または Ubuntu のような Unix ライクなマシンには、プログラムをスリープさせるのにマイクロ秒単位の時間を要する usleep と呼ばれる機能があります。実行を 1 秒間一時停止するには、値を 1000000 として渡す必要があります。

このメソッドは、unistd.h ヘッダーファイルで定義されています。

コード例:

#include <unistd.h>

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

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  while (seconds >= 1) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    usleep(1000000);
    seconds--;
  }
}

上記のプログラムでは、getPresentDateTime() メソッドを使用して、システムから現在の日付と時刻を取得します。

出力:上記のプログラムは Ubuntu で実行されました。Unix ライクな環境で実行するには、ファイルを保存し、g++ を使用してコンパイルし、./a.out と入力して実行します。

g++ first.cpp   //executed in ubuntu
 ./a.out

Enter total number seconds for the counter
7
Counter : 7 : Sun Mar 13 01:31:56 2022

Counter : 6 : Sun Mar 13 01:31:57 2022

Counter : 5 : Sun Mar 13 01:31:58 2022

Counter : 4 : Sun Mar 13 01:31:59 2022

Counter : 3 : Sun Mar 13 01:32:00 2022

Counter : 2 : Sun Mar 13 01:32:01 2022

Counter : 1 : Sun Mar 13 01:32:02 2022

Windows でカウントダウンタイマーを作成する

上記と同じようにすべてが残ります。唯一の違いは、unistd.h の代わりに windows.h を含める必要があることです。そして、usleep の代わりに、sleep() メソッドを使用する必要があります。

sleep() メソッドはミリ秒単位で時間がかかります。

コード例:

#include <Windows.h>

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

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  while (seconds >= 1) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    Sleep(1000);
    seconds--;
  }
}

出力:上記のプログラムは、Windows に存在する IDE で実行されました。

Enter total number seconds for the counter
10
Counter : 10 : Sun Mar 13 01:42:13 2022

Counter : 9 : Sun Mar 13 01:42:14 2022

Counter : 8 : Sun Mar 13 01:42:15 2022

Counter : 7 : Sun Mar 13 01:42:16 2022

Counter : 6 : Sun Mar 13 01:42:17 2022

Counter : 5 : Sun Mar 13 01:42:18 2022

Counter : 4 : Sun Mar 13 01:42:19 2022

Counter : 3 : Sun Mar 13 01:42:20 2022

Counter : 2 : Sun Mar 13 01:42:21 2022

Counter : 1 : Sun Mar 13 01:42:22 2022

次に、アップカウンタータイマーを見てみましょう。

C++ でアップカウントタイマーを作成する

ダウンカウンターと同じように実装されます。唯一の違いは、ループを転送方式で実行することです。これは、増分アプローチです。

サンプルコード:Windows 環境のアップカウンター。

#include <Windows.h>

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

string getPresentDateTime() {
  time_t tt;
  struct tm *st;

  time(&tt);
  st = localtime(&tt);
  return asctime(st);
}

int main() {
  int seconds;
  cout << "Enter total number seconds for the counter" << endl;
  cin >> seconds;

  int count = 0;

  while (count != 10) {
    cout << "Counter : " << seconds << " : " + getPresentDateTime() << endl;
    Sleep(1000);
    seconds++;
    count++;
  }
}

上記のコードでは、秒を 10 回インクリメントします。そしてそれを追跡するために、変数 count を導入しました。これは、seconds 入力が与えられた時間から 10 秒が完了すると停止します。

出力:

Enter total number seconds for the counter
5
Counter : 5 : Sun Mar 13 02:15:42 2022

Counter : 6 : Sun Mar 13 02:15:43 2022

Counter : 7 : Sun Mar 13 02:15:44 2022

Counter : 8 : Sun Mar 13 02:15:45 2022

Counter : 9 : Sun Mar 13 02:15:46 2022

Counter : 10 : Sun Mar 13 02:15:47 2022

Counter : 11 : Sun Mar 13 02:15:48 2022

Counter : 12 : Sun Mar 13 02:15:49 2022

Counter : 13 : Sun Mar 13 02:15:50 2022

Counter : 14 : Sun Mar 13 02:15:51 2022
著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

関連記事 - C++ Timer