Index: trunk/Include/Classes/System/Threading/Thread.ab
===================================================================
--- trunk/Include/Classes/System/Threading/Thread.ab	(revision 493)
+++ trunk/Include/Classes/System/Threading/Thread.ab	(revision 495)
@@ -1,7 +1,13 @@
 'Thread.ab
 
-'--------------------------------------------------------------------
-' スレッドの優先順位
-'--------------------------------------------------------------------
+NameSpace System
+
+/*タイプ*/
+TypeDef LocalDataStoreSlot = Long
+
+
+NameSpace Threading
+
+/*列挙体*/
 Enum ThreadPriority
 	Highest =      2
@@ -12,10 +18,42 @@
 End Enum
 
+Enum ThreadState
+	'スレッド状態に AbortRequested が含まれ、そのスレッドは停止していますが、状態はまだ Stopped に変わっていません。  
+	Aborted
+	'スレッド上で Thread.Abort メソッドを呼び出しますが、そのスレッドの終了を試みる保留中の System.Threading.ThreadAbortException をスレッドが受け取っていません。  
+	AbortRequested
+	'スレッドは、フォアグラウンド スレッドではなく、バックグランド スレッドとして実行します。この状態は、Thread.IsBackground プロパティを設定して制御されます。  
+	Background
+	'スレッドをブロックせずに起動します。保留中の ThreadAbortException もありません。  
+	Running
+	'スレッドを停止します。  
+	Stopped
+	'スレッドの停止を要求します。これは、内部でだけ使用します。  
+	StopRequested
+	'スレッドを中断します。  
+	Suspended
+	'スレッドの中断を要求します。  
+	SuspendRequested
+	'スレッド上に Thread.Start メソッドを呼び出しません。  
+	Unstarted
+	'スレッドがブロックされています。これは、Thread.Sleep または Thread.Join の呼び出し、ロックの要求 (たとえば、Monitor.Enter や Monitor.Wait の呼び出しによる)、または ManualResetEvent などのスレッド同期オブジェクトの待機の結果である可能性があります。   
+	WaitSleepJoin
+End Enum
+
+/*
+デリゲート
+*/
+Delegate Sub ThreadStart()
+
+
+/*
+関数ポインタ
+*/
 TypeDef PTHREAD_START_ROUTINE = *Function(args As VoidPtr) As DWord
 
 
-'--------------------------------------------------------------------
-' スレッド クラス
-'--------------------------------------------------------------------
+/*
+クラス
+*/
 Class Thread
 	m_hThread As HANDLE
@@ -24,6 +62,8 @@
 
 	m_fp As PTHREAD_START_ROUTINE
+	m_dg As ThreadStart
 	m_args As VoidPtr
 	name As String
+	state As ThreadState
 
 	isThrowing As Boolean
@@ -42,4 +82,5 @@
 
 		name = "sub thread"
+		state = ThreadState.Unstarted
 
 		isThrowing = False
@@ -55,4 +96,5 @@
 
 		name = "sub thread"
+		state = ThreadState.Unstarted
 
 		isThrowing = False
@@ -68,4 +110,5 @@
 
 		name = "sub thread"
+		state = ThreadState.Unstarted
 
 		isThrowing = False
@@ -78,4 +121,5 @@
 
 		name = "sub thread"
+		state = ThreadState.Unstarted
 
 		isThrowing = False
@@ -86,12 +130,9 @@
 	End Sub
 
-
 	Function Equals(thread As Thread) As Boolean
 		Return m_dwThreadId = thread.m_dwThreadId
 	End Function
 
-	'-----------------------
-	' Public Properties
-	'-----------------------
+Public 'public property
 	Function IsAlive() As Boolean
 		Dim code As DWord
@@ -118,4 +159,8 @@
 	End Function
 
+	Function ThreadState() As System.Threading.ThreadState
+		Return This.state
+	End Function
+
 	Function Name() As String
 		Return name
@@ -124,4 +169,10 @@
 		This.name = name
 	End Sub
+
+Public 'public method
+/*	Sub Abort()
+		TODO '実装のためにはかなり検討が必要
+		'This.__Throw(New ThreadAbortException)
+	End Sub*/
 
 	Sub Start()
@@ -129,44 +180,7 @@
 		m_hThread=_beginthreadex(NULL,0,AddressOf(_run),VarPtr(This),CREATE_SUSPENDED,m_dwThreadId)
 		SetThreadPriority(m_hThread,m_Priority)
-		Resume()
-	End Sub
-
-Private
-	Function Cdecl _run() As Long
-		'------------
-		' 前処理
-		'------------
-
-		' 構造体の一時メモリ退避用領域を作成
-		needFreeStructurePointers = _System_malloc( 1 )
-		countOfNeedFreeStructurePointers = 0
-
-		'GCにスレッド開始を通知
-		_System_pobj_AllThreads->BeginThread(This, _System_GetSp() As *LONG_PTR)
-
-
-		'------------
-		'実行
-		'------------
-		_run=Run()
-
-
-		'------------
-		'後処理
-		'------------
-
-		'GCにスレッド終了を通知
-		_System_pobj_AllThreads->EndThread(This)
-
-		' 構造体の一時メモリ退避用領域を破棄
-		_System_free( needFreeStructurePointers )
-
-		'自身のスレッドハンドルを閉じる
-		CloseHandle(InterlockedExchangePointer(VarPtr(m_hThread),NULL))
-		m_hThread=0
-
-	End Function
-
-Public
+		This.Resume()
+	End Sub
+
 	Virtual Function Run() As Long
 		If m_fp Then
@@ -176,14 +190,67 @@
 
 	Sub Suspend()
+		This.state = ThreadState.SuspendRequested
 		If SuspendThread(m_hThread) = &HFFFFFFFF Then
-			debug
+			This.state = ThreadState.Unstarted
+			Debug 'Throw New ThreadStateException
 		End If
+		This.state = ThreadState.Suspended
 	End Sub
 	Sub Resume()
 		If ResumeThread(m_hThread) = &HFFFFFFFF Then
-			debug
+			state = ThreadState.Unstarted
+			Debug 'Throw New ThreadStateException
 		End If
-	End Sub
-
+		This.state = ThreadState.Running
+	End Sub
+
+/*	Function GetData(LocalDataStoreSlot)
+	End Function
+	Sub SetData(LocalDataStoreSlot)
+	End Sub*/
+
+	Static Function CurrentThread() As Thread
+		Return _System_pobj_AllThreads->CurrentThread()
+	End Function
+
+	/*------------------------ クラス内部用 --------------------------*/
+Private
+	Function Cdecl _run() As Long
+		'------------
+		' 前処理
+		'------------
+
+		' 構造体の一時メモリ退避用領域を作成
+		needFreeStructurePointers = _System_malloc( 1 )
+		countOfNeedFreeStructurePointers = 0
+
+		'GCにスレッド開始を通知
+		_System_pobj_AllThreads->BeginThread(This, _System_GetSp() As *LONG_PTR)
+
+
+		'------------
+		'実行
+		'------------
+		_run=Run()
+
+
+		'------------
+		'後処理
+		'------------
+
+		'GCにスレッド終了を通知
+		_System_pobj_AllThreads->EndThread(This)
+
+		' 構造体の一時メモリ退避用領域を破棄
+		_System_free( needFreeStructurePointers )
+
+		'自身のスレッドハンドルを閉じる
+		CloseHandle(InterlockedExchangePointer(VarPtr(m_hThread),NULL))
+		m_hThread=0
+
+	End Function
+
+	/*------------------------ システム用 --------------------------*/
+Public
 	Function __GetContext(ByRef Context As CONTEXT) As BOOL
 		Return GetThreadContext(m_hThread,Context)
@@ -222,12 +289,6 @@
 		countOfNeedFreeStructurePointers = 0
 	End Sub
-
-
-	Static Function CurrentThread() As Thread
-		Return _System_pobj_AllThreads->CurrentThread()
-	End Function
 End Class
 
-Dim _System_pobj_AllThreads As *Detail._System_CThreadCollection
 
 Namespace Detail
@@ -422,9 +483,16 @@
 
 End Namespace 'Detail
-
+End NameSpace 'Threading
+End NameSpace 'System
+
+
+/* システムが使う変数 */
+Dim _System_pobj_AllThreads As *System.Threading.Detail._System_CThreadCollection
+
+/* システムが呼び出す関数 */
 Sub _System_AddNeedFreeTempStructure( structurePointer As VoidPtr )
-	Thread.CurrentThread.__AddNeedFreeTempStructure( structurePointer )
+	System.Threading.Thread.CurrentThread.__AddNeedFreeTempStructure( structurePointer )
 End Sub
 Sub _System_FreeTempStructure()
-	Thread.CurrentThread.__FreeTempStructure()
+	System.Threading.Thread.CurrentThread.__FreeTempStructure()
 End Sub
