【C言語】1秒ごとに処理を行う方法【sleep(), usleep(), nanosleep()】

この記事では、C言語で1秒ごとに処理をする方法について解説します。プログラミング初心者でもわかりやすいように解説しているので参考にしてみてください。

目次

sleep関数を使った処理方法

C言語で1秒ごとに処理する方法の中でも一番簡単な方法が、sleep()関数を使う方法です。

この関数は指定した時間だけプログラムを一時停止させるためのもので、引数には待機させたい秒数を入力します。

#include <stdio.h>
#include <unistd.h>  // sleep()関数を使用する場合必要

int main()
{
  int count = 0;
  while (count <= 10) {  // 無限ループ
    printf("Hello, World!\n");
    sleep(1);   // 1秒待機
    count++;
  }
  
  return 0;
}

上記のプログラムでは、無限ループの中でprintf()関数で”Hello, World!”と表示してから、sleep(1)が実行されます。これにより、次回ループまで約1秒間プログラムが一時停止し、それから再度処理が始まります。

Windowsではsleep関数は使えません。後述しているWindows環境の場合の処理方法を参考にしてください。

Windows環境の場合の処理方法

Windows環境において、1秒ごとに処理を行う場合は「Sleep関数」を使います。Sleep関数は指定した時間(ミリ秒単位)だけプログラムの実行を停止するための関数です。以下にその使い方を解説します。

まず、必要なヘッダファイルwindows.hをインクルードします。

#include <windows.h>

次に、Sleep関数で停止させたい時間(1秒=1000ミリ秒)を引数として渡します。

Sleep(1000); // 1秒待機

このようにすることで、プログラムが一定時間停止し、非同期処理を実装していたらその間別の処理や表示等が可能となります。

指定する値がミリ秒であるため、1秒停止させるには1000を指定しないといけないこと、関数名の1文字目が大文字のSであることに気をつけてください。

以上がWindows環境下でのSleep関数使用方法です。

usleep関数を使った処理方法の解説

C言語には、一定時間待機するためのsleep関数がありますが、同じような目的で使用される usleep関数も存在します。

usleep関数は、マイクロ秒(µs)単位で指定した時間だけ処理を中断します。

#include <unistd.h>

int usleep(useconds_t usec);

ここで usec 引数に待機するマイクロ秒を指定します。例えば1000を指定すれば1ミリ秒待機することになります。

また、usleep関数では宣言時に unistd.hヘッダーファイルをインクルードしている必要がある点に注意してください。

Windowsではusleep関数は使えません。後述しているWindows環境の場合の処理方法を参考にしてください。

現在のバージョンのPOSIXでは非推奨とされており、代わりにnanosleep関数の利用が推奨されています。

nanosleep関数を使った処理方法の解説

nanosleep関数は、指定したナノ秒だけプログラムを待機させることができる関数です。

使用方法

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);
引数名説明入出力
reqナノ秒単位で待ち時間を示す構造体ポインタ入力/出力
remSignal/Interrupt変換後の残り時間が返される場所出力

指定できる時間単位が非常に細かいため、高精度な処理も可能です。

#include<stdio.h>
#include<time.h>
#include <unistd.h>
int main(void){
    // 待機時間設定用変数
    struct timespec ts,rem;

     // 1秒間待つように設定します (sec, nsec)
    ts.tv_sec = 1;
    ts.tv_nsec = 0;

     printf("Hello World.\n");	

	
     /* nanosleepでそのままスリープ */
	nanosleep(&ts , &rem );

     printf("Finished waiting.\n");
 }

Windowsではusleep関数は使えません。後述しているWindows環境の場合の処理方法を参考にしてください。

例のごとくWindows環境では使えないので、windows.hをインクルードしてSleep関数を使いましょう。

まとめ

まとめとして、C言語で1秒ごとに処理する方法について4つの方法を紹介しました。

  • sleep関数を使った処理方法
  • Windows環境の場合の処理方法
  • usleep関数を使った処理方法
  • nanosleep関数を使った処理方法

それぞれのメリット・デメリットや使用シーンに応じて適切なものを選び、プログラムの高度化や最適化に役立ててください。

目次