Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Der etwas andere Thread. (https://www.delphipraxis.net/165032-der-etwas-andere-thread.html)

himitsu 11. Dez 2011 22:36


Der etwas andere Thread.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Joar, was soll ich dazu sagen?


Es handelt sich um eine Thread-Klasse, welche allerdings auf die Form gepappt werden kann.

Den Vorfahren dieser Klasse nutze ich eigentlich schon eine Weile und nun wurde alles nochmals komplett neu ausfgesetzt.
Auch in Delphi in XE hatte Emba mir (und Anderen) schon die Grundidee geklaut und mit
Delphi-Referenz durchsuchenTThread.CreateAnonymousThread eine Procedur bereitgestellt, womit man einen TThread starten kann, ohne dafür extra eine eigene TThread-Klasse implementieren zu müssen.


So, ich ging nun noch einen Schritt weiter, denn die Variante mit der Prozedur hat einen "kleinen" Nachteil, denn man kann einige Features nicht nutzen.
> So ist es z.B. nicht möglich an die Exceptionbehandlung ranzukommen, so daß Exceptions schnell mal einfach so verschwinden, wenn man es nicht selber verabfängt.
Leider wucks dadurch meine eigene Funktion mit unübersichtlichen Parametern. :cry:
Auch bietet die Embas Variante des AnonymousThread keine wirklich vorgesehehne threadsicherr Möglichkeit diesen Thread dann wieder abzubrechen. :gruebel:


Jetzt pappt man also diese Klasse auf seine Form und, wie bei einem TTimer, wird dann die Execute-Methode implementiert.

Alternativ kann man das Teil auch komplett ohne Executemethode nutzen (kann beide Modi aber auch mischen ... siehe Demo) und über eine integrierte Queue lassen sich externe Befehle in diesem bereitgestellten Thread synchronisiert parallelisieren ... ein kleiner Worker-Thread also.

...

k.A. was ich noch sagen könnte.
Und Fotos Screenshots gibt's auch keine.




[add]
Ach ja, die SE-Version ist für ältere Delphi gedacht (falls da was nicht geht, einfach melden)
und das andere Package ist für ab D2010.

Delphi-Laie 11. Dez 2011 23:09

AW: Der etwas andere Thread.
 
himitsu, mei Gutster, das ist also sozusagen eine "Pseudo-VCL"-Thread-Klasse, so wie Delphis Timer?

Mein Kompliment! Muß ich gleich mal ausprobieren.

v2afrank 12. Dez 2011 07:02

AW: Der etwas andere Thread.
 
Was ich gesehen habe gefällt mir. Ich werde damit auch intensiver rumspielen

himitsu 12. Dez 2011 08:01

AW: Der etwas andere Thread.
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1140895)
das ist also sozusagen eine "Pseudo-VCL"-Thread-Klasse, so wie Delphis Timer?

Könnte man so sagen.
Es ist eine "richtige" VCL-Klasse, welche einen TThread kapselt und verwaltet. ('ne Worker-Queue)

- alles schön über den OI einstellbar
- läßt sich auf eine Form/ein DatenModul pappen und schon sieht man gleich wo man einen Thread verbaut hat :lol:

Bei der "abgespeckten" SE-Version muß ich aber noch schauen wie sich das verhällt.
Hab's noch nicht in einem älteren Delphi kompiliert.
Aber vom Grundsystem sollte die auch unter älternen Delphis laufen.


PS: 'nen Thread-Pool kommt och irgendwann.

Zitat:

Zitat von v2afrank (Beitrag 1140912)
Was ich gesehen habe gefällt mir. Ich werde damit auch intensiver rumspielen

Das freut micht :D
Also vorallem wenn es nochmals kräftig durchgetestet wird. :oops:
Es war nicht grade "einfach" die Synchronisation mit der VCL hinzubekommen.
Vorallem beim Beenden des Programms hatte ich anfangs Probleme, wenn da der Thread noch aktiv auf die Form zugreifen wollte. :cry:


[add]
Grade eben hab ich bemerkt, daß in der Queue noch keine Sync-Funktionen vorhanden sind.
Klar kann man dieses auch manuell machen (seit den anonymen Methoden),
Delphi-Quellcode:
TThread.Synchronize(nil, procedure
  begin
    ...
  end);
aber warum nicht auch dort der einfachere/kürzere Weg?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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