sleep|処理を一時停止する 複数の方法【C言語/C++/Swift/Objective-C】

5種類の方法があります。C言語ではsleep関数usleep関数、C++ではsleep_for関数の利用が可能です。Objective-CやSwiftの場合はNSThreadを用いることができます。Windows環境の場合はwindows.hヘッダーのSleep関数を用いると良いでしょう。

一時停止

遅延実行

CPUのスレッドを停止させずに、特定の処理だけを遅延・待機させたいような場合には、タイマーによる遅延実行が必要です。以下のページを参考にしてください。

処理を遅延実行する方法

NSThread.sleepForTimeInterval

Cocoa/Cocoa Touchフレームワーク標準のもの。
秒単位で処理を止めます。
「2.5秒」等、小数点での指定も可能です。

// #import <Foundation/NSThread.h>

/* Objective-C */
printf("3秒処理が止まります");
[NSThread sleepForTimeInterval:3.0];

/* Swift */
print("3秒処理が止まります")
NSThread.sleepForTimeInterval(3.0) // Swift 3 以前
Thread.sleep(forTimeInterval: 3.0) // Swift 4 以降

sleep関数

Unix標準ライブラリのもの。
秒単位で処理を止めます。

// #include <unistd.h>
printf("3秒処理が止まります");
sleep(3);

usleep関数

Unix標準ライブラリのもの。
マイクロ秒単位で処理を止めます。

// #include <unistd.h>
printf("3秒処理が止まります");
usleep(3 * 1000000);

Sleep関数

Windows環境で使用可能。
ミリ秒単位で処理を止めます。

// #include <windows.h>
printf("3秒処理が止まります");
Sleep(3 * 1000);

sleep_for

C++の場合はsleep_for関数によるスレッドのスリープが可能です。

// #include <chrono>
// #include <thread>
std::this_thread::sleep_for(std::chrono::nanoseconds(3));  // 3 ナノ秒
std::this_thread::sleep_for(std::chrono::microseconds(3)); // 3 マイクロ秒
std::this_thread::sleep_for(std::chrono::milliseconds(3)); // 3 ミリ秒
std::this_thread::sleep_for(std::chrono::seconds(3));      // 3 秒
std::this_thread::sleep_for(std::chrono::minutes(3));      // 3 分
std::this_thread::sleep_for(std::chrono::hours(3));        // 3 時間

小数点による時間指定は出来ませんが、上記のsecondsやminutes等のdurationオブジェクトは異なる精度同士での演算に対応しています。

std::this_thread::sleep_for(
  std::chrono::seconds(3) +      //   3秒
  std::chrono::milliseconds(500) // 0.5秒
); // wait 3.5 秒

std::this_thread::sleep_for(
  4 * std::chrono::milliseconds(500) // 0.5秒 ✕ 4
); // wait 2 秒

このように異なる時間同士の合算が可能となっています。


私「3秒時間が止まります・・・」
Objective-C「知ってる!それ中二病ってやつでしょ!!」

広告