C#でスレッドのSleepメソッドを実装する方法
スレッドのSleepメソッドとは
C#におけるThread.Sleepメソッドは、現在実行中のスレッドを指定した時間だけ一時停止(スリープ)させるためのメソッドです。処理に意図的な待ち時間を挿入したい場合や、一定間隔で処理を繰り返したい場合などに活用されます。
引数にはミリ秒単位の時間を指定します。たとえば、2秒間スレッドを停止させたい場合は、次のように記述します。
int sleepfor = 2000; Thread.Sleep(sleepfor);
Sleepメソッドの主な使い方
Thread.Sleep(1000)… 1秒間スレッドを停止するThread.Sleep(0)… 現在のタイムスライスを放棄し、他のスレッドへ実行を譲るThread.Sleep(Timeout.Infinite)… 別スレッドから割り込み(Interrupt)がかかるまで無期限に停止する
サンプルプログラム
以下のコードは、子スレッドを作成し、その中でSleepメソッドを使ってスレッドを一時停止させる実装例です。ThreadStartデリゲートで子スレッド用のメソッドを指定し、Start()でスレッドを起動しています。
using System;
using System.Threading;
namespace MyApplication {
class ThreadCreationProgram {
public static void CallToChildThread() {
Console.WriteLine("Child thread starts");
int sleepfor = 2000;
Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}
static void Main(string[] args) {
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}実行結果
In Main: Creating the Child thread Child thread starts Child Thread Paused for 2 seconds Child thread resumes
このプログラムでは、まずMainメソッド内で子スレッドが作成・開始され、「Child thread starts」と表示されます。その後、子スレッドは2秒間スリープして一時停止し、時間が経過すると再開して「Child thread resumes」と出力します。
注意点
Thread.Sleepは呼び出したスレッド全体をブロックします。GUIアプリケーションのメインスレッド(UIスレッド)で呼び出すと、画面が固まってしまう原因になるため注意が必要です。非同期処理で待機時間を作りたい場合は、await Task.Delay()を使用するのが推奨されています。
-
Javaの並行処理入門 – Thread.sleep()メソッドの使い方を解説
sleep()メソッドとはThread.sleep()メソッドは、現在実行中のスレッドを、引数で指定したミリ秒数だけ一時停止(スリープ)させるための静的メソッドです。呼び出されると、そのスレッドは指定された時間の間、実行を停止し、CPUの実行権限を他のスレッドに譲ります。なお、sleep()メソッドはInterruptedExceptionというチェック例外をスローする可能性があるため、必ずtry-catchブロックで囲むか、メソッドの宣言部でthrows句による宣言が必要です。それでは、具体的な使用例を見ていきましょう。コード例import java.lang.*; public class
-
JavaのThread.sleep()メソッドとは?使い方と例外処理を徹底解説
sleep()メソッドはThreadクラスのstatic(静的)メソッドであり、指定した時間だけ現在実行中のスレッドを一時停止(スリープ)させるために使用します。スレッドが他のスレッドから割り込みを受けるとInterruptedExceptionがスローされるため、Thread.sleep()は必ずtry-catchブロック内に記述するか、throws句で宣言しなければなりません。 Thread.sleep()を呼び出すと、内部でスレッドスケジューラと連携し、現在のスレッドを一定時間「待機状態」に遷移させます。そして待機時間が経過すると、スレッドは待機状態から「実行可能状態(RUNNABLE)