source: Include/Classes/System/Threading/Thread.ab@ 1

Last change on this file since 1 was 1, checked in by (none), 17 years ago
File size: 2.0 KB
Line 
1'threading.ab
2
3Enum ThreadPriority
4 Highest = THREAD_PRIORITY_HIGHEST
5 AboveNormal = THREAD_PRIORITY_ABOVE_NORMAL
6 Normal = THREAD_PRIORITY_NORMAL
7 BelowNormal = THREAD_PRIORITY_BELOW_NORMAL
8 Lowest = THREAD_PRIORITY_LOWEST
9End Enum
10
11TypeDef PTHREAD_START_ROUTINE = *Function(args As VoidPtr) As DWord
12
13Class Thread
14 m_hThread As HANDLE
15 m_Priority As ThreadPriority
16
17 m_fp As PTHREAD_START_ROUTINE
18 m_args As VoidPtr
19Public
20 Sub Thread()
21 m_hThread=0
22 m_Priority=ThreadPriority.Normal
23
24 m_fp=0
25 End Sub
26 Sub Thread(fp As PTHREAD_START_ROUTINE, args As VoidPtr)
27 m_hThread=0
28 m_Priority=ThreadPriority.Normal
29
30 m_fp=fp
31 m_args=args
32 End Sub
33
34
35 Sub Priority(value As ThreadPriority)
36 m_Priority=value
37 If m_hThread Then
38 SetThreadPriority(m_hThread, value)
39 End If
40 End Sub
41 Function Priority() As ThreadPriority
42 Return m_Priority
43 End Function
44
45
46 Sub Start()
47 Dim ThreadId As DWord
48 m_hThread=_beginthreadex(NULL,0,AddressOf(ThreadEntryPoint),VarPtr(This),CREATE_SUSPENDED,ThreadId)
49 SetThreadPriority(m_hThread,m_Priority)
50 Resume()
51 End Sub
52
53Private
54 Static Function ThreadEntryPoint(pv As VoidPtr) As DWord
55 Dim pThis As *Thread
56 pThis = pv
57 ThreadEntryPoint = pThis->ThreadStartup() As DWord
58 End Function
59
60 Function ThreadStartup() As Long
61 '------------
62 ' 前処理
63 '------------
64
65 'GCにスレッド開始を通知
66 _System_GC.BeginThread(m_hThread,_System_GetSp() As *LONG_PTR)
67
68
69 '------------
70 '実行
71 '------------
72 ThreadStartup = Run()
73
74
75 '------------
76 '後処理
77 '------------
78
79 'GCにスレッド終了を通知
80 _System_GC.EndThread(m_hThread)
81
82 '自身のスレッドハンドルを閉じる
83 CloseHandle(m_hThread)
84 m_hThread = 0
85
86 End Function
87
88Public
89 Virtual Function Run() As Long
90 If m_fp Then
91 Run=m_fp(m_args)
92 End If
93 End Function
94
95 Sub Suspend()
96 SuspendThread(m_hThread)
97 End Sub
98 Sub Resume()
99 ResumeThread(m_hThread)
100 End Sub
101
102 Sub Join()
103 If m_hThread Then
104 WaitForSingleObject(m_hThread, INFINITE)
105 End If
106 End Sub
107End Class
Note: See TracBrowser for help on using the repository browser.