AGB  ·  Datenschutz  ·  Impressum  







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

TThread, TTask usw. oder OmniThreadLibrary?

Ein Thema von Glados · begonnen am 19. Okt 2017 · letzter Beitrag vom 20. Okt 2017
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 19. Okt 2017, 18:02
Kannst du vllt mal kurz genauer erklären was du vorhast?
Das klingt jetzt irgendwie so als sollte das was im Button steht dauerhaft ausgeführt werden nachdem man den Button einmal geklickt hat?

Also einmal draufklicken und dann wiederholt er etwas unendlich lange (bzw. bis der Benutzer das irgendwie anders abbricht)?

In dem Fall müsste die ganze (endlos-)Schleife in einen eigenen Thread.
Bei deinem Codeschnipsel müsstest du aber aufpassen dass du dann da nicht auf GUI-Elemente zugreifen darfst.

Generell bin ich mir nicht sicher ob du da tatsächlich mehrere Threads oder vllt überhaupt Threads brauchst.
Unterm Strich: Kannst du etwas genauer erklären was du vor hast? Das ist grad alles etwas verwirrend und man kann nur grob erahnen was du da vor hast bzw. was du brauchst.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#12

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 19. Okt 2017, 20:02
Zitat:
Generell bin ich mir nicht sicher ob du da tatsächlich mehrere Threads oder vllt überhaupt Threads brauchst.
Die brauche ich definitiv. Je nach Arbeitsaufwand wird entschieden, ob nur einer benötigt wird oder mehrere.

Eine Endlosschleife ist das in dem Button nicht.
Es gibt eine definierte Anzahl an Arbeiten die zu erledigen ist. Pro Arbeit wird XY aufgerufen. In XY werden dann die Daten vorbereitet, in Threads verarbeitet und zum Schluss wird aufgeräumt. Dasselbe dann noch einmal. So lange, bis die definierte Anzahl an Arbeiten abgearbeitet ist (repeat-until im Button).

Alles einfach in einen Thread packen würde ich gerne machen. Aber dafür greife ich zwangsweise zu viel auf die VCL zu.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 19. Okt 2017, 22:59
Alles einfach in einen Thread packen würde ich gerne machen. Aber dafür greife ich zwangsweise zu viel auf die VCL zu.
Dann solltest du letzteres lösen, denn dies ist vermutlich schon der richtige Ansatz. Andererseits spekulieren wir hier alle auch nur
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#14

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 19. Okt 2017, 23:13
Ich bin da wenig versiert. Ich würde mir jetzt einfach einen MessageHandler bauen und von überall dort wo ich auf die VCL zugreife, schicke ich dann Messages an den Handler. Der Handler würde dann auf die VCL zugreifen. Ist aber sicher mehr als falsch.

Nur kann ich aus einem Thread heraus ohne Probleme weitere Threads erzeugen?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 20. Okt 2017, 09:40
Nur kann ich aus einem Thread heraus ohne Probleme weitere Threads erzeugen?
Der Hauptthread ist auch nur ein Thread.
Einfach ein TThread Objekt erstellen und starten.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 20. Okt 2017, 09:45
Warte doch gar nicht, sondern lass dich vom fertigen Thread benachrichtigen!

Beschäftige dich mal hiermit:
http://docwiki.embarcadero.com/Libra...ad.OnTerminate
Vllt ist für das warten das OnTerminate-Event von TThread das was du brauchst. Du erstellst den Thread, weist das Event zu, startest den Thread und der Button-Klick ist beendet.
Wenn dann der Thread fertig ist landest du automatisch in deinem Eventhandler für OnTerminate und kannst abschließende Sachen machen.
Auf diese Art und Weise bekäme ich die while-Schleife weg. Gute Idee! Werde ich heute Abend mal testen, nachdem ich einen nervigen Bug entfernt habe (hoffentlich).

Das nächste Mal schreibe ich einfach in großer, rot blinkender Schrift...
Man muss auf die Links auch klicken, lesen und verstehen.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#17

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 20. Okt 2017, 10:59
Zitat:
Man muss auf die Links auch klicken, lesen und verstehen.
Ich kenne OnTerminate. Ich habe oben auch extra geschrieben, dass ich mich benachrichtigen lassen kann, sobald ein Thread beendet ist bzw. sobald der letzte im Multitasking beendet ist

Das Problem ist aber repeat-until. Denn irgendwo muss ich ja warten bevor der nächste Job gestartet wird.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 20. Okt 2017, 11:20
Zitat:
Man muss auf die Links auch klicken, lesen und verstehen.
Ich kenne OnTerminate. Ich habe oben auch extra geschrieben, dass ich mich benachrichtigen lassen kann, sobald ein Thread beendet ist bzw. sobald der letzte im Multitasking beendet ist
Unwahrscheinlich, denn dann hättest du nicht dieses Konstrukt mit der while-Schleife.
Zum Verständnis: Mein Beitrag ist Nummer #5 hier im Thread.

Das Problem ist aber repeat-until. Denn irgendwo muss ich ja warten bevor der nächste Job gestartet wird.
Es wäre am Einfachsten, dass du ein Beispiel-Projekt hier hoch lädst.
Natürlich musst du nicht konkret zeigen was du du tust.
Eine Art Ersatz-Job (Primzahlen berechnen, Sleep, etc.) tut es auch.
Anhand dessen kann man die konkreten Lösungsstrategien entwickeln.
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#19

AW: TThread, TTask usw. oder OmniThreadLibrary?

  Alt 20. Okt 2017, 11:24
Zitat:
Unwahrscheinlich, denn dann hättest du nicht dieses Konstrukt mit der while-Schleife.
Es ist sogar sehr wahrscheinlich, dass ich OnTerminate kenne.

Ich habe insgesamt 2 Schleifen, wie ich oben irgendwie versucht habe zu erklären. Ich habe jetzt aber keine Lust mich zu streiten
Aber eines weiß ich: ich kann mein Problem nicht korrekt erklären und ich weiß genau was OnTerminate macht.

Zitat:
Ich bin da wenig versiert. Ich würde mir jetzt einfach einen MessageHandler bauen und von überall dort wo ich auf die VCL zugreife, schicke ich dann Messages an den Handler. Der Handler würde dann auf die VCL zugreifen. Ist aber sicher mehr als falsch.
So in etwa aktualisiere ich bereits eine Progressbar aus einem Thread heraus.
Ist das da oben denn überhaupt der richtige Ansatz, um auf VCL-Komponenten aus einem Thread heraus zuzugreifen?

Geändert von Glados (20. Okt 2017 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz