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

C++でプログラムを指定したミリ秒間スリープさせる方法

C++でプログラムをxミリ秒間スリープさせるには?

この記事では、C++プログラムをユーザーが指定したxミリ秒間スリープ(待機)させる方法を解説します。

この処理を実現する方法はいくつかありますが、ここでは標準ライブラリのclock()関数を使用します。clock()関数は、プログラム実行開始時点からの現在のCPU時間を返します。まず、現在のクロック値と指定された待機時間xから終了時刻を計算し、その時刻に達するまで空のwhileループを実行して時間を待ちます。

ここで使用しているCLOCKS_PER_SECというマクロは、1秒あたりのクロックティック数を表すものです。このマクロを使うことで、ミリ秒単位の時間をクロック単位に変換することができます。

それでは、概念をより深く理解するために、実際のコードを見てみましょう。

サンプルコード

#include <iostream>
#include <time.h>
using namespace std;
void sleepcp(int milli) {
   // クロスプラットフォーム対応のスリープ関数
   clock_t end_time;
   end_time = clock() + milli * CLOCKS_PER_SEC/1000;
   while (clock() < end_time) {
      // 待機用の空ループ
   }
}
int main() {
   cout << "Staring counter for 7 seconds (7000 Milliseconds)" << endl;
   sleepcp(7000);
   cout << "Timer end" << endl;
}

実行結果

Staring counter for 7 seconds (7000 Milliseconds)
Timer end

このコードでは、sleepcp()関数に7000(ミリ秒)を渡して7秒間の待機を実現しています。実行すると、カウンター開始のメッセージが表示された後、7秒経過してから「Timer end」が出力されます。

補足:ビジーウェイトの注意点

この方法は「ビジーウェイト(busy-wait)」と呼ばれる手法で、待機中もCPUを消費し続けるというデメリットがあります。そのため、実際の開発では、C++11以降で利用できるstd::this_thread::sleep_for()を使うことをおすすめします。こちらはスレッドを休止状態にするため、CPU負荷をかけずに正確な待機処理が可能です。

  1. 二分法を用いて方程式の根を求めるC++プログラム

    関数f(x)と2つの数a、bが与えられ、f(a)・f(b)<0を満たし、関数f(x)が区間[a, b]内に存在するとします。ここでの課題は、二分法(バイセクション法)を用いて、関数f(x)の区間aとbの間に存在する根の値を求めることです。 二分法とは? 二分法とは、「a」と「b」で定義された範囲内において、関数f(x)の根の値を求めるための数値計算手法の一つです。関数の根とは、その値を代入したときにf(x)=0となるような値xのことです。 例 方程式 F(x) = x^3 − 8 を考える この方程式は、x = 2 のとき F(x) = 2^3 − 8 = 0 となります。 したがって

  2. C++でピラミッドの体積を計算するプログラムの作り方|底面の形状別の公式と実装例

    ピラミッドの底面の種類に応じた辺の長さが与えられたとき、そのピラミッドの体積を計算するのが本記事のテーマです。 ピラミッドとは、外側の面がすべて三角形で構成され、それらが共通の一点(頂点)で交わることで鋭い角を形成する3次元図形です。ピラミッドの体積は、底面がどのような形状であるかによって異なります。 ピラミッドの底面にはさまざまな種類があり、代表的なものは以下の通りです。 底面の形状別の体積の求め方 三角形の底面(三角錐) 底面が三角形の場合、ピラミッドの体積は次の公式で求められます。 体積 = (1/6) × a × b × h 正方形の底面(四角錐) 底面が正方形の場合、ピラミッドの体