1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
==== Program.vb ====
Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports System.Threading
Namespace threads_syncen
Public Class Program
<STAThread()> _
Public Shared Sub Main()
Console.WriteLine("==================Threads==================")
Dim puffer As Integer = 0
Dim demo As New Class1()
Dim auftrag_bearbeiten As New Thread(New ThreadStart(demo.auftrag))
'auftrag_bearbeiten.Priority = ThreadPriority.AboveNormal;//so kann man auch bewirken das der Thread mehr CPUZeit bekommt und somit ruckzuck der Bool auf True gesetzt wird
auftrag_bearbeiten.Start()
'damit der gerade gestartete Thread auch die Zeit hat den Bool zu ändern
Thread.Sleep(10)
While Class1.auftrag_laeuft = True
SyncLock demo
'Object wird gesperrt, damit der Mainthread auf current_process sicher zugreifen kann
If puffer <> Class1.current_process Then
Console.WriteLine(Class1.current_process)
puffer = Class1.current_process
End If
End SyncLock
End While
'damit sich die Console nicht sofort schließt
Console.WriteLine("" & Chr(10) & "" + "Taste druecken um zu beenden")
Console.ReadKey()
End Sub
End Class
End Namespace
==== Class1.vb ====
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Threading
Namespace threads_syncen
Public Class Class1
'der Aktuelle Auftrag
Public Shared current_process As Integer = 0
Public Shared auftrag_laeuft As Boolean = False
'Zahlen die durchgegangen werden und vom MainThread verglichen werden
Private nummern As Integer() = New Integer() {101, 102, 103, 104, 105, 106, _
107, 108, 109, 110, 111, 112, _
113}
Public Sub auftrag()
auftrag_laeuft = True
For i As Integer = 0 To nummern.Length - 1
current_process_setzen(nummern(i))
'do some Work
Thread.Sleep(400)
Next
auftrag_laeuft = False
End Sub
'Methode um current_process zu sperren fuer den Thread
Private Sub current_process_setzen(ByVal nummer As Integer)
SyncLock Me
current_process = nummer
End SyncLock
End Sub
End Class
End Namespace
|