Autor Beitrag
Daimonion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 30.06.08 11:36 
Hallo Leute.

Macht es Sinn in der Ereignisbehandlungsroutine OnTimer des TTimer Objektes einen Thread zu starten um den Prozessor zu entlasten oder nicht?

Ich habe hier in meinem Projekt einen Timer mit 100ms der in OnTimer Werte aus einer Karte ließt und diese Aufbereitet.

Danke für eure Antworten.

Grüße

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mo 30.06.08 11:56 
Starte doch statt bei jedem OnTimer einen neuen Thread zu starten einfach einen Thread, den du dann entsprechend mit Sleep schlafen legst, um deinen 100ms Intervall zu bekommen :idea:

Vorteil: Die Zeit für das Starten und Beenden eines Threads fällt weg, was deutlichen Overhead bedeuten würde.

Ob die Verwendung eines Threads jetzt vorteilhaft ist, hängt davon ab, was berechnet wird.
Richtige Vorteile von der Geschwindigkeit gibts i.d.R. erst bei Dual-Core Systemen, da dort dann "bisher unerschlossene Ressourcen" benutzt werden können (der zweite Rechenkern)

_________________
Programmers never die, they just GOSUB without RETURN
Daimonion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 30.06.08 12:02 
Alias5000 genau das hab ich mir auch überlegt, als ich den Beitrag abgeschickt habe. ;)

Ist dann natürlich die bessere Lösung und würde dann auch so umgesetzt werden.

Da die Systeme, auf denen mein Programm läuft, noch keine DualCore CPUs haben, ist die Frage ob durch die Verlagerung des Codes von einem Timer in einen Thread die Prozessorlast gesenkt werden kann?
Geschwindigkeitsprobleme hab ich nicht. Nur eine hohe Prozessorlast S775 Celeron ist bei 75%. Diese Last will ich irgendwie verringern.

Was in dem Timer gemacht wird:

Es werden ca. 300 Funktionsaufrufe durchgeführt. Diese Aufrufe werden über eine dll an eine interne PCI Karte geschickt, die in den Rückgabewerten der Aufrufe Double werte enthält.
Diese Rückgabewerte werden ausgewertet und es wird über die Anzahl der Lesevorgänge ein Mittelwert gebildet. Dieser gebildete Wert wird dann mit einer Exponentialfunktion verknüpft.
Dieser Vorgang wird für 3 unterschiedliche Werte durchgeführt, so dass diese Funktion mit 3 zu multiplizieren ist.
Anschließend werden die 3 gebildeten Werte noch in einer weiteren Funktion wieder über eine dll in die interne Karte geschrieben, die diese dann ausführt (asynchron ausführt)

Vielleicht hilft euch die Beschreibung noch was.

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."


Zuletzt bearbeitet von Daimonion am Mo 30.06.08 12:07, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 30.06.08 12:06 
Die Prozessorlast sinkt dadurch garantiert nicht. Das einzige, was man mit Threads erreichen kann ist, dass die Anwendung auch bei längeren Berechnungen flüssig bedienbar bleibt. ;-) Das ist auch unabhängig von der Anzahl der Kerne.

_________________
We are, we were and will not be.
Daimonion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 30.06.08 12:09 
user profile iconGausi hat folgendes geschrieben:
Die Prozessorlast sinkt dadurch garantiert nicht. Das einzige, was man mit Threads erreichen kann ist, dass die Anwendung auch bei längeren Berechnungen flüssig bedienbar bleibt. ;-) Das ist auch unabhängig von der Anzahl der Kerne.


Schade, so was hab ich schon vermutet. Ergo bekomme ich die Porzessorlast nur runter, wenn ich meinen Code optimiere?!

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Mo 30.06.08 12:15 
Japs

_________________
Programmers never die, they just GOSUB without RETURN
Daimonion Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 30.06.08 12:16 
Okay, danke, dann werde ich mich mal an die Lösung machen ;)

Edit:

Nur der Vollständigkeit halber.

Ich glaube die Pozessorlast verursacht die Funktion zum auslesen der Werte. Ich werd mich mal an den Hersteller wenden und ihn Fragen inwieweit man die Last verringern kann.

Danke euch

_________________
Zitat Stromberg S03E08 - Erika:
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."