Thread.Join メソッド (TimeSpan)

スレッドが終了するまで、または指定した時間が経過するまで呼び出し元のスレッドをブロックします。

Overloads Public Function Join( _
   ByVal timeout As TimeSpan _) As Boolean
[C#]
public bool Join(TimeSpantimeout);
[C++]
public: bool Join(TimeSpantimeout);
[JScript]
public function Join(
   timeout : TimeSpan) : Boolean;

パラメータ

  • timeout
    スレッドが終了するのを待機する時間に設定される TimeSpan

戻り値

スレッドが終了した場合は truetimeout パラメータで指定した時間が経過してもスレッドが終了していない場合は false

例外

例外の種類 条件
ArgumentOutOfRangeException timeout の値が負で、ミリ秒単位の Timeout.Infinite と等しくないか、または MaxValue ミリ秒より大きいです。
ThreadStateException 呼び出し元が、 Unstarted 状態のスレッドを結合しようとしました。

解説

timeoutTimeout.Infinite が指定されている場合、このメソッドは戻り値以外は Join() と同じように動作します。

このメソッドは、現在のスレッドの状態を変更して、 WaitSleepJoin の状態にします。 ThreadState.Unstarted 状態のスレッドで Join を呼び出すことはできません。

使用例

[Visual Basic, C#, C++] Join メソッドで TimeSpan 値を使用する方法の例を次に示します。

 
Imports System
Imports System.Threading

Public Class Test

    Shared waitTime As New TimeSpan(0, 0, 1)

    Shared Sub Main() 
        Dim newThread As New Thread(AddressOf Work)
        newThread.Start()

        If newThread.Join( _
            TimeSpan.op_Addition(waitTime, waitTime)) Then

            Console.WriteLine("New thread terminated.")
        Else
            Console.WriteLine("Join timed out.")
        End If
    End Sub

    Shared Sub Work()
        Thread.Sleep(waitTime)
    End Sub

End Class

[C#] 
using System;
using System.Threading;

class Test
{
    static TimeSpan waitTime = new TimeSpan(0, 0, 1);

    public static void Main() 
    {
        Thread newThread = 
            new Thread(new ThreadStart(Work));
        newThread.Start();

        if(newThread.Join(waitTime + waitTime))
        {
            Console.WriteLine("New thread terminated.");
        }
        else
        {
            Console.WriteLine("Join timed out.");
        }
    }

    static void Work()
    {
        Thread.Sleep(waitTime);
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

static TimeSpan waitTime = TimeSpan(0, 0, 1);

__gc class Test
{
public:
    static void Work()
    {
        Thread::Sleep(waitTime);
    }
};

void main() 
{
    Thread* newThread = new Thread(new ThreadStart(0, Test::Work));
    newThread->Start();

    if(newThread->Join(waitTime + waitTime))
    {
        Console::WriteLine(S"New thread terminated.");
    }
    else
    {
        Console::WriteLine(S"Join timed out.");
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

参照

Thread クラス | Thread メンバ | System.Threading 名前空間 | Thread.Join オーバーロードの一覧 | スレッド状態