Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thread) (https://www.delphipraxis.net/192395-frage-zu-threads-objectlist-mit-klassen-jede-klasse-hat-variablen-ggf-1-thread.html)

a.def 14. Apr 2017 22:35

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Perfekt wäre natürlich eine Lösung wie die deine. Aber da muss ich erstmal gesund (aktuell krank) und ausgeschlafen durchblicken.

Bis später und danke für die Hilfe soweit :thumb:

So. Edit.

Was ich mit meiner Idee gestern vermeiden wollte, war etwas sowas hier
Delphi-Quellcode:
if aThreadInfo.ThreadList.Items[iThreadID].iMode < 5 then
 bPaused := aThreadInfo.ThreadList.Items[iThreadID].itemX.bThreadSleeping
else
 bPaused := aThreadInfo.ThreadList.Items[iThreadID].itemY.bThreadSleeping;
Wenn bThreadSleeping nun in itemX (ein Thread) und itemY (ein anderer Thread) verfügbar wäre, könne ich an vielen Stellen Code sparen.

Mavarik 15. Apr 2017 10:23

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
emm ich versuche mich mal an einer Antwort...

Zitat:

Zitat von a.def (Beitrag 1367682)
lege ich den Thread schlafen (ich prüfe einfach auf while bPause do ...

Sag mir bitte nicht, dass Du im Thread

Delphi-Quellcode:
While Pause do;
geschrieben hast...

So etwas macht man so!

Du solltest Dir mal diese Tutorial ansehen...


Zitat:

Zitat von a.def (Beitrag 1367672)
Interfaces, nein danke :thumb:

Sag ich nix zu...

Zitat:

Zitat von a.def (Beitrag 1367693)
Ich könnte das Problem umgehen, indem ich die Thread-Unit in die andere Unit, die den Thread erzeugt, verfrachte aber das will ich ehrlich gesagt nicht.

Ich welcher Unit es steht ist doch egal... Google mal Servicelocator oder Dependency-Injection!

Zitat:

Zitat von a.def (Beitrag 1367705)
Wenn bThreadSleeping nun in itemX (ein Thread) und itemY (ein anderer Thread) verfügbar wäre, könne ich an vielen Stellen Code sparen.

Wenn ich mal alles andere aus 8 lasse... Warum schickst Du nicht einfach eine Message über den MessageManager? Hierbei ist es egal in welcher Unit oder Ebene etwas steht. Mit einer Message kannst Du auch ein Object versenden (also die Referenz) oder Du versendest eine Callback Routine die der Empfänger aufrufen kann... (Oder ein Interface :thumb:)

Zitat:

Zitat von a.def (Beitrag 1367702)
Ich lasse einfach erstmal alles so wie es ist.

Oder so...

a.def 15. Apr 2017 10:29

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Zitat:

Sag mir bitte nicht, dass Du im Thread
While Pause do; geschrieben hast...
Doch habe ich. Was ist daran so schlimm?
Ohne das while im Thread kann der Thread doch gar nicht wissen, wie lange er schlafen soll.
Denn ich habe auch Threads wo im Thread selber schnell ausgerechnet wird, wie lange er schlafen soll.
Wie soll das denn sonst gehen?

Zitat:

Warum schickst Du nicht einfach eine Message über den MessageManager?
Wie kann man die denn an einen bestimmten Thread schicken? Ich hab ja mehr als nur einen.

Mavarik 15. Apr 2017 10:34

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Zitat:

Zitat von a.def (Beitrag 1367733)
Zitat:

Sag mir bitte nicht, dass Du im Thread
While Pause do; geschrieben hast...
Doch habe ich. Was ist daran so schlimm?
Ohne das while im Thread kann der Thread doch gar nicht wissen, wie lange er schlafen soll.
Denn ich habe auch Threads wo im Thread selber schnell ausgerechnet wird, wie lange er schlafen soll.
Wie soll das denn sonst gehen?

So!

Zitat:

Zitat von a.def (Beitrag 1367733)
Wie kann man die denn an einen bestimmten Thread schicken? Ich hab ja mehr als nur einen.

ID mit geben?

a.def 15. Apr 2017 11:51

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Das mit dem Event ist ja schön und funktioniert super (auch weniger Code).
Aber ich kann da ja nicht sowas machen...
Delphi-Quellcode:
for i := 0 to iTimeOut do
 begin
  MacheWasMitI;
  PruefeIrgendwasAnderes;
  PruefeNochWas;

  if IrgendwasErfuellt then
   Break;
 end;
Aber grundsätzlich:
warum kein Sleep oder While im Thread?

Mavarik 15. Apr 2017 17:06

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Zitat:

Zitat von a.def (Beitrag 1367754)
Das mit dem Event ist ja schön und funktioniert super (auch weniger Code).
Aber ich kann da ja nicht sowas machen...
Delphi-Quellcode:
for i := 0 to iTimeOut do
 begin
  MacheWasMitI;
  PruefeIrgendwasAnderes;
  PruefeNochWas;

  if IrgendwasErfuellt then
   Break;
 end;
Aber grundsätzlich:
warum kein Sleep oder While im Thread?

Kar geht das man kann den Event prüfen...

Schau dir mal die CPU load an.

a.def 15. Apr 2017 17:09

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Zitat:

Schau dir mal die CPU load an.
Aktuell sind vier eigene Threads am laufen, jeder mit einer eigenen Warteschleife, welche irgendwann morgen Mittag ein Ende hat.
CPU-Auslastung: 0%.

Zitat:

Kar geht das man kann den Event prüfen...
Ich habe eben schon gesucht wie das geht aber leider nichts gefunden da ich auch nicht weiß wonach man suchen muss :(

Mavarik 15. Apr 2017 18:31

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Wenn Du mal den richtigen Code zeigst - schau ich mal drüber!

a.def 15. Apr 2017 18:43

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Es läuft so ab:

- 1) Thread wird gestartet
- 2) Execute-Methode wird ausgeführt
- 3) es wird ausgerechnet, wie lange geschlafen werden soll. Das Ergebnis steht in iSleep.
- 4) es folgt eine for-Schleife mit immer einem Sleep(1000); drin. Selbstverständlich auch Abbruchbedingungen usw., damit das Programm nicht hängt
- 5) Ist die Schleife vorbei, wird der eigentliche Code ausgeführt

Es geht also nur um Punkt 4. Eine ganz normale For-Schleife.
Klar, ich habe auch andere Threads mit einer While-Schleife, aber denselben Abbruchbedingungen.

Mavarik 15. Apr 2017 19:22

AW: Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thre
 
Und warum eine For-Schleife mit N Sleeps?


Anstatt :
Delphi-Quellcode:
E_Event.WaitFor(FSleepTime);
Kostet ~ 0 CPU Zeit... Und der Thread arbeitet wieder in wenigen Pico-Sekunden bei einem E_Event.SetEvent;

Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 Uhr.
Seite 4 von 5   « Erste     234 5      

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