'threading.ab Enum ThreadPriority Highest = THREAD_PRIORITY_HIGHEST AboveNormal = THREAD_PRIORITY_ABOVE_NORMAL Normal = THREAD_PRIORITY_NORMAL BelowNormal = THREAD_PRIORITY_BELOW_NORMAL Lowest = THREAD_PRIORITY_LOWEST End Enum TypeDef PTHREAD_START_ROUTINE = *Function(args As VoidPtr) As DWord Class Thread m_hThread As HANDLE m_Priority As ThreadPriority m_fp As PTHREAD_START_ROUTINE m_args As VoidPtr Public Sub Thread() m_hThread=0 m_Priority=ThreadPriority.Normal m_fp=0 End Sub Sub Thread(fp As PTHREAD_START_ROUTINE, args As VoidPtr) m_hThread=0 m_Priority=ThreadPriority.Normal m_fp=fp m_args=args End Sub Sub Priority(value As ThreadPriority) m_Priority=value If m_hThread Then SetThreadPriority(m_hThread, value) End If End Sub Function Priority() As ThreadPriority Return m_Priority End Function Sub Start() Dim ThreadId As DWord m_hThread=_beginthreadex(NULL,0,AddressOf(ThreadEntryPoint),VarPtr(This),CREATE_SUSPENDED,ThreadId) SetThreadPriority(m_hThread,m_Priority) Resume() End Sub Private Static Function ThreadEntryPoint(pv As VoidPtr) As DWord Dim pThis As *Thread pThis = pv ThreadEntryPoint = pThis->ThreadStartup() As DWord End Function Function ThreadStartup() As Long '------------ ' 前処理 '------------ 'GCにスレッド開始を通知 _System_GC.BeginThread(m_hThread,_System_GetSp() As *LONG_PTR) '------------ '実行 '------------ ThreadStartup = Run() '------------ '後処理 '------------ 'GCにスレッド終了を通知 _System_GC.EndThread(m_hThread) '自身のスレッドハンドルを閉じる CloseHandle(m_hThread) m_hThread = 0 End Function Public Virtual Function Run() As Long If m_fp Then Run=m_fp(m_args) End If End Function Sub Suspend() SuspendThread(m_hThread) End Sub Sub Resume() ResumeThread(m_hThread) End Sub Sub Join() If m_hThread Then WaitForSingleObject(m_hThread, INFINITE) End If End Sub End Class