Index: /Include/Classes/System/Threading/Thread.ab
===================================================================
--- /Include/Classes/System/Threading/Thread.ab	(revision 147)
+++ /Include/Classes/System/Threading/Thread.ab	(revision 148)
@@ -22,5 +22,4 @@
 	m_hThread As HANDLE
 	m_dwThreadId As DWord
-
 	m_Priority As ThreadPriority
 
@@ -56,5 +55,4 @@
 		m_hThread=hThread
 		m_dwThreadId=dwThreadId
-		m_Priority=ThreadPriority.Normal
 	End Sub
 
@@ -107,5 +105,5 @@
 
 		'GCにスレッド開始を通知
-		_System_pobj_AllThreads->BeginThread(This,_System_GetSp() As *LONG_PTR)
+		_System_pobj_AllThreads->BeginThread(VarPtr(This),_System_GetSp() As *LONG_PTR)
 
 
@@ -121,5 +119,5 @@
 
 		'GCにスレッド終了を通知
-		_System_pobj_AllThreads->EndThread(This)
+		_System_pobj_AllThreads->EndThread(VarPtr(This))
 
 		'自身のスレッドハンドルを閉じる
@@ -137,8 +135,12 @@
 
 	Sub Suspend()
-		SuspendThread(m_hThread)
+		If SuspendThread(m_hThread) = &HFFFFFFFF Then
+			debug
+		End If
 	End Sub
 	Sub Resume()
-		ResumeThread(m_hThread)
+		If ResumeThread(m_hThread) = &HFFFFFFFF Then
+			debug
+		End If
 	End Sub
 
@@ -172,5 +174,5 @@
 
 	Sub _System_CThreadCollection()
-		ppobj_Thread=HeapAlloc(_System_hProcessHeap,0,1)
+		ppobj_Thread=GC_malloc(1)
 		pStackBase=HeapAlloc(_System_hProcessHeap,0,1)
 		ppException=HeapAlloc(_System_hProcessHeap,0,1)
@@ -182,10 +184,4 @@
 
 	Sub ~_System_CThreadCollection()
-	End Sub
-
-	Sub Finalize()
-		HeapFree(_System_hProcessHeap,0,ppobj_Thread)
-		ppobj_Thread=0
-
 		HeapFree(_System_hProcessHeap,0,pStackBase)
 		pStackBase=0
@@ -201,10 +197,6 @@
 
 	'スレッドを生成
-	Sub BeginThread(ByRef obj_Thread As Thread,NowSp As *LONG_PTR)
+	Sub BeginThread(pThread As *Thread,NowSp As *LONG_PTR)
 		EnterCriticalSection(CriticalSection)
-
-			'スレッドオブジェクトを生成
-			Dim pobj_NewThread As *Thread
-			pobj_NewThread=New Thread(obj_Thread)
 
 			'例外処理管理用オブジェクトを生成
@@ -215,5 +207,5 @@
 			For i=0 To ELM(ThreadNum)
 				If ppobj_Thread[i] = 0 Then
-					ppobj_Thread[i] = pobj_NewThread
+					ppobj_Thread[i] = pThread
 					pStackBase[i] = NowSp
 					ppException[i] = pException
@@ -223,6 +215,6 @@
 
 			If i = ThreadNum Then
-				ppobj_Thread=HeapReAlloc(_System_hProcessHeap,0,ppobj_Thread,(ThreadNum+1)*SizeOf(*Thread))
-				ppobj_Thread[ThreadNum]=pobj_NewThread
+				ppobj_Thread=realloc(ppobj_Thread,(ThreadNum+1)*SizeOf(*Thread))
+				ppobj_Thread[ThreadNum]=pThread
 				pStackBase=HeapReAlloc(_System_hProcessHeap,0,pStackBase,(ThreadNum+1)*SizeOf(LONG_PTR))
 				pStackBase[ThreadNum]=NowSp
@@ -235,10 +227,12 @@
 
 	'スレッドを終了
-	Sub EndThread(ByRef obj_Thread As Thread)
+	Sub EndThread(pThread As *Thread)
 		EnterCriticalSection(CriticalSection)
 			Dim i As Long
 			For i=0 To ELM(ThreadNum)
-				If ppobj_Thread[i]->Equals(obj_Thread) Then
-					Delete ppobj_Thread[i]
+				If ppobj_Thread[i] = pThread Then
+					If i = 0 Then
+						Delete pThread
+					End If
 					ppobj_Thread[i]=0
 					pStackBase[i]=0
@@ -269,4 +263,38 @@
 	End Sub
 
+	' 自分以外のスレッドを中断
+	Sub SuspendAnotherThread()
+		Dim currentThread = Thread.CurrentThread()
+
+		Dim i As Long
+		For i=0 To ELM(ThreadNum)
+
+			If currentThread.Equals( ByVal ppobj_Thread[i] ) Then
+				Continue
+			End If
+
+			If ppobj_Thread[i] Then
+				ppobj_Thread[i]->Suspend()
+			End If
+		Next
+	End Sub
+
+	' 自分以外のスレッドを再開
+	Sub ResumeAnotherThread()
+		Dim currentThread = Thread.CurrentThread()
+
+		Dim i As Long
+		For i=0 To ELM(ThreadNum)
+
+			If currentThread.Equals( ByVal ppobj_Thread[i] ) Then
+				Continue
+			End If
+
+			If ppobj_Thread[i] Then
+				ppobj_Thread[i]->Resume()
+			End If
+		Next
+	End Sub
+
 	'カレントスレッドを取得
 	Function CurrentThread(ByRef obj_Thread As Thread) As BOOL
