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