Servus, brauch mal bitte Hilfe.
Aufgabe ist es 2 Variablen hochzählen in einer vorgegeben Zeit pro Gesamt-Durchlauf, und das mit weniger CPU Last wie ich es hinbekommen habe.
Var1 0 bis 9
Var2 1 - 127
Var 1 wird erst erhöt wenn Var2 127 ist.............eigentlich ganz einfach.
1 kompletter Durchlauf soll aber in einem vorgegebenen Zeitraum stattfinden,
als Bsp. insgesamt 1270 Schritte in 250ms, wobei ich die Zeit bei Var1 einfach mal vernachlässige......macht pro Schritt/Durchlauf Var2 0,181ms
bedeutet ich muss in der Schleife "bremsen"......das ist mein Problem. denn in meiner Variante mit meiner Do Loop hab ich ca 20-30% CPU Last.
Eigentlich sollte ich den Thread bremsen, nur weiß ich das dass nur im 1ms Bereich geht. Daher die Frage, wie mach ich das Vorhaben ohne die CPU Last? Ich bräuchte 3 solcher Threads...macht locker 60% CPU für eigentlich nichts....
Projekt im Anhang stammt aus VB Express 2012
Bitte keine Fragen warum weshalb.........es ist so und muss irgendwie so gelöst werden
Danke Heiko
Aufgabe ist es 2 Variablen hochzählen in einer vorgegeben Zeit pro Gesamt-Durchlauf, und das mit weniger CPU Last wie ich es hinbekommen habe.
Var1 0 bis 9
Var2 1 - 127
Var 1 wird erst erhöt wenn Var2 127 ist.............eigentlich ganz einfach.
1 kompletter Durchlauf soll aber in einem vorgegebenen Zeitraum stattfinden,
als Bsp. insgesamt 1270 Schritte in 250ms, wobei ich die Zeit bei Var1 einfach mal vernachlässige......macht pro Schritt/Durchlauf Var2 0,181ms
bedeutet ich muss in der Schleife "bremsen"......das ist mein Problem. denn in meiner Variante mit meiner Do Loop hab ich ca 20-30% CPU Last.
Eigentlich sollte ich den Thread bremsen, nur weiß ich das dass nur im 1ms Bereich geht. Daher die Frage, wie mach ich das Vorhaben ohne die CPU Last? Ich bräuchte 3 solcher Threads...macht locker 60% CPU für eigentlich nichts....
VB.NET-Quellcode
- Imports System.Threading
- Imports System
- Imports System.Diagnostics
- Public Class Form1
- Dim wert1 As Integer = 0
- Dim wert2 As Integer = 0
- Private thread_zaehlen As Thread
- Dim SW As New System.Diagnostics.Stopwatch
- Dim Button_1_Status As Boolean = False
- Dim millisekunden As Integer
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
- SW.Start()
- Label1.Text = ""
- Label2.Text = ""
- Label3.Text = ""
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- If Button_1_Status = True Then
- thread_zaehlen.Abort()
- thread_zaehlen.Join()
- Button_1_Status = False
- Else
- Button_1_Status = True
- thread_zaehlen = New Thread(AddressOf zaehlen) 'neuen thread erstellen
- thread_zaehlen.IsBackground = True 'in background
- thread_zaehlen.Start() 'starten
- End If
- End Sub
- Public Sub zaehlen()
- Dim timestamp_start As Double
- Dim timestamp_durchlauf As Double
- Do
- For i = 0 To 9
- wert1 = i
- For i1 = 1 To 127
- timestamp_start = SW.ElapsedTicks * 1000000 / Stopwatch.Frequency ' Mikrosekunden Auflösung
- wert2 = i1
- ausgabe()
- Do Until SW.ElapsedTicks * 1000000 / Stopwatch.Frequency >= timestamp_start + 250
- Loop
- Next
- Next
- 'Ende 1 kompletten Durchlaufes......von vorn beginnen
- timestamp_durchlauf = SW.ElapsedTicks * 1000000 / Stopwatch.Frequency ' Mikrosekunden Auflösung ende eines durchlauf
- Me.Invoke(Sub() Me.Label3.Text = CStr((timestamp_durchlauf - timestamp_start)))
- Loop Until Button_1_Status = False
- End Sub
- Public Sub ausgabe()
- Me.Invoke(Sub() Me.Label1.Text = CStr(wert1))
- Me.Invoke(Sub() Me.Label2.Text = CStr(wert2))
- End Sub
- End Class
Projekt im Anhang stammt aus VB Express 2012
Bitte keine Fragen warum weshalb.........es ist so und muss irgendwie so gelöst werden
Danke Heiko
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „kollimann“ ()