Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Container? (https://www.delphipraxis.net/194082-omnithreadlibrary-ist-fuer-meine-anforderung-der-richtige-weg-welchen-container.html)

juergen 26. Okt 2017 11:58

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Hallo Codehunter,

Zitat:

Zitat von Codehunter (Beitrag 1384180)
Grundsätzlich stellt sich die Frage: Entwickelst du nur für den Hausgebrauch oder marktorientiert?

Das Ganze ist ein rein privates Vergnügen und nur für mich und Freunde gedacht. Allerdings kann ich die jeweils neuen Erkenntnisse dann gut in der Praxis gebrauchen (für die Firma).
Ich programmiere grundsätzlich nur hobbymäßig :)
Klar, auch die Firma hat dadurch den Nutzen, da ich diverse Anforderungen dann umsetzen kann.

Codehunter 26. Okt 2017 12:36

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
So hab ich vor 20 Jahren auch mal angefangen :-) Nur wars bei mir ein Outlook-Express-Ersatz. Oder noch früher, eine Warenwirtschaft in Amiga Basic. (Rückblickend eine scheußliche IDE. Wer die nur hergestellt hat... ^^)

bytecook 26. Okt 2017 13:17

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Zitat:

Zitat von Codehunter (Beitrag 1384208)
* Oder noch früher, eine Warenwirtschaft in Amiga Basic. (Rückblickend eine scheußliche IDE. Wer die nur hergestellt hat... ^^) *

DAS waren noch Zeiten... wobei ... mein erster Programmierhobel war noch ein Texas Instruments 99/4A mit satten 12KB :P

Codehunter 26. Okt 2017 13:22

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Also der A500 war mein erster eigener. 1991 war das. Davor gabs an der Schule noch den KC-87/1.11. Der hatte schon fette 16 kB RAM und konnte die Hornhaut von den Fingern hobeln :-)

GPRSNerd 26. Okt 2017 21:24

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Nachdem die Threads jetzt so schön laufen, wollte ich meiner Applikation noch ein Feature (sprich Button) spendieren, um laufende Threads vollständig abzubrechen und keine neuen mehr zu starten.
Geht anscheinend nicht so, wie ich mir das gedacht habe: :oops:

Delphi-Quellcode:
  for I := 0 to TL.Count - 1 do
  begin
    T := TL[I];
    T.Terminate;
  end; -> Der Teil ist funktionslos, bricht also nix ab, die Threads laufen munter weiter, wahrscheinlich weil man nie den richtigen Zeitpunkt erwischt, bevor ein Thread an seinem Ende den nächsten noch suspendierten startet...
Delphi-Quellcode:
  DL.Clear;
  TL.Clear; -> Hier kommt es zu Exceptions, weil ich den laufenden Threads die Threadliste plattmache.
Ihr habt bestimmt ein paar gute Ideen, oder?

Codehunter 27. Okt 2017 07:22

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Globale boolesche Variable bauen, die im Mainthread vor dem Start des nächsten Threads abgefragt wird. Beim Start deines Threadstapels setzt du die auf FALSE und bei Klick auf deinen Stopbutton auf TRUE.

EDIT: Mir ist eben zufällig noch etwas sehr schönes in die Hände gefallen. Der Chef himself erklärt Threads. Sogar auf Deutsch, was für Einsteiger sicher kein Nachteil ist. Besonders spannend fand ich den Teil ganz am Ende mit den prozessübergreifenden Threads. Das wird ja inzwischen z.B. von Browsern verwendet, um jeden Tab in einem eigenen Prozess zu kapseln. Stürzt ein Prozess ab, weil ein schrottiges Javascript ihn ins Nirvana geschickt hat, dann nimmt es nicht gleich das ganze Browserfenster mit.

bytecook 27. Okt 2017 09:37

AW: OmniThreadLibrary: Was ist für meine Anforderung der richtige Weg? Welchen Contai
 
Zitat:

Zitat von GPRSNerd (Beitrag 1384292)
Nachdem die Threads jetzt so schön laufen, wollte ich meiner Applikation noch ein Feature (sprich Button) spendieren, um laufende Threads vollständig abzubrechen und keine neuen mehr zu starten.
Geht anscheinend nicht so, wie ich mir das gedacht habe: :oops:

Delphi-Quellcode:
  for I := 0 to TL.Count - 1 do
  begin
    T := TL[I];
    T.Terminate;
  end; -> Der Teil ist funktionslos, bricht also nix ab, die Threads laufen munter weiter, wahrscheinlich weil man nie den richtigen Zeitpunkt erwischt, bevor ein Thread an seinem Ende den nächsten noch suspendierten startet...
Delphi-Quellcode:
  DL.Clear;
  TL.Clear; -> Hier kommt es zu Exceptions, weil ich den laufenden Threads die Threadliste plattmache.
Ihr habt bestimmt ein paar gute Ideen, oder?

nach T.Terminate noch ein T.WaitFor verwenden? Waitfor kehrt erst nach Beendigung des Threads zurück.
http://docwiki.embarcadero.com/RADSt...f%C3%BChrt_ist
Oder Omnithread verwenden ...
Beispiele zum Terminieren von Tasks
http://otl.17slon.com/book/chap05.ht...ks-termination
Ich arbeite hauptsächlich mit Ableitungen von TOmniWorker in Verbindung mit IOmniTaskControl, intern arbeitet dort die Verwaltung mit Events (DSiWaitForTwoObjects),
die Worker werden mittels IOmniTaskControl.Terminate() sauber aufgelöst (.Terminate(1000) killt den Thread nach 1000ms, würde ich aber nicht machen). Wichtig für mich, da manche meiner Komponenten-Tasks weitere Tasks erzeugen...

@Codehunter ... das ist doch mal ein nettes Video - geb ich gleich mal an meinen Azubi weiter :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Seite 4 von 4   « Erste     234   

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 by Thomas Breitkreuz