AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenübergabe aus Thread in MainForm

Ein Thema von backdraft · begonnen am 10. Okt 2022 · letzter Beitrag vom 11. Okt 2022
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.575 Beiträge
 
Delphi 12 Athens
 
#1

AW: Datenübergabe aus Thread in MainForm

  Alt 11. Okt 2022, 21:36
Ja genau.

Wenn dein Hauptthread nur so viel Daten aus dem Thread nimmt, wie er verarbeiten kann und dann immernoch etwas Zeit hat,
oder er nimmt sich z.B. 20 Dinge aud dem Array/Queue raus und macht dann immer mal einen kurzen Sleep Delay)
dann läuft der Cache (dein Array/Queue) zwar langsam voll, wenn mal zu viel rein kommt, aber das Programm reagiert immernoch.

Andersrum kann der Thread aber auch langsamer werden, bzw. immer mal kurz pausieren, wenn der Hauptthread nicht mehr kann.


Oder kombiniert ... der Hauptthread macht so schnell wie er kann (nimmt sich z.B. alle 100ms so viel raus, wie er in weniger als dieser Zeit schafft) und der Thread pausiert, wenn ihm der Cache (Array/Queue) viel zu voll wird.




ODER

Es verarbeitet nicht der Hauptthread, sondern ein weiterer Thread,
dann reagiert das Programm auch immer, weil der Hauptthread ja nichts anderes macht, also mit dir zu reden und auf dich zu hören.

Weitergehend könnte man vielleicht dann auch gleich mehrere Threads verarbeiten lassen.
Der eine Thread holt die Daten, ein/mehrere Threads holen sich immer mal was aus der Queue/Array und ackern gleichzeitig
und der Hauptthread versorgt die GUI und gibt deine Befehle an die Threads weiter.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2022 um 21:41 Uhr)
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
339 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datenübergabe aus Thread in MainForm

  Alt 11. Okt 2022, 22:24
Ja genau.

Andersrum kann der Thread aber auch langsamer werden, bzw. immer mal kurz pausieren, wenn der Hauptthread nicht mehr kann.
Ja, das war ja eine ursprüngliche Frage.
Woher weiß ich, das der Hauptthread ausgelastet ist.
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.575 Beiträge
 
Delphi 12 Athens
 
#3

AW: Datenübergabe aus Thread in MainForm

  Alt 11. Okt 2022, 23:02
OnIdle prüfen
TApplicationEvents

z.B. Messen wie lang ein Verarbeitungsdurchlauf dauert
GetTickCount, QueryPerformanceCounter, TStopwatch oder sonstwas

oder die CPU-Auslastung des Hauptthreads messen
MSDN-Library durchsuchenGetSystemTimes

Und da der Hauptthread ja auch nur ein Thread ist, ist es nicht verboten TThread zu benutzen, und dort gibt es seit 'ner Weile so Einiges
TThread.GetSystemTimes(...)
TThread.GetCPUUsage(...)
TThread.GetTickCount
TThread.GetTickCount64
Das sind ClassFunctions, also können genau so benutzt werden,
aber auch für Nicht-Klassenfunktionen, kann man sich einen "Dummy"-TThread geben lassen.
z.B. TThread.Current.ThreadID

Und falls jemand wissen will, wieviele Threads man machen kann
TThread.ProcessorCount
Oder man nehme etwas, was das für Einen übernimmt.
TWorkStealingQueue
TThreadPool bzw. TParallel
und vielleicht auch noch TTask statt TThread (wobei das hier ja nicht nöig wäre, aber für andere Anwendungsfälle erwähnt)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Okt 2022 um 23:05 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz