Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle? (https://www.delphipraxis.net/152488-thread-thread-erzeugen%3B-ergibt-das-ein-problem-bzgl-handle.html)

s.h.a.r.k 24. Jun 2010 10:37

Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Ich bin mit Threads wohl immer noch nicht so sicher, wie ich es gerne hätte und habe im Moment eine theoretische Frage. Und zwar habe ich einen StartupThread, der eigentlich alle Sachen erledigt, die beim Start des Programms anfallen. Innerhalb dieses Threads wird ein weiterer erzeugt. Stellt das ein Problem dar, oder ist das belanglos? Ich hatte neulich jedenfalls ein Problem mit einem Handle, welches ich innerhalb eines Thread alloziert habe. Und lustigerweise hängt sich die IDE genau an der Stelle auf, an der ich diesen Thread starten will. Lasse ich das Programm jedoch ohne Debugger laufen, so klappt es einwandfrei.

himitsu 24. Jun 2010 11:10

AW: Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Wo ein Thread erzeugt wird, ist egal.
PS: Der Hauptthread ist auch nur ein Thread. :zwinker:

Es gibt aber bestimmte dinge, welche an einen Thread gebunden sind.

z.B. werden Windows/Fenster (VCL-Komponenten/TTimer und die entsprechenden Komponenten von Windows) nur in dem Thread behandelt, also in dessen Nachrichtenbehandlung (WindowsMessage-Schleife) bearbeitet, in welchem sie erstellt wurden.

(auch darum sollte man nicht auf die VCL, innerhalb eines "anderen" Threads, zugreifen)

Bernhard Geyer 24. Jun 2010 11:12

AW: Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1031254)
Ich hatte neulich jedenfalls ein Problem mit einem Handle, welches ich innerhalb eines Thread alloziert habe.

Falls es ein GUI-Handle ist: Diese haben unter Windows eine Thread-Affinität. Diese dürfen nur im erzeugenden Thread verwendet werden.

s.h.a.r.k 24. Jun 2010 11:24

AW: Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Hm, okay, dann sollte das Problem nicht von dem Thread-In-Thread-Ding her kommen. Aber dann versteh ich immer noch nicht ganz, warum dann mein Programm abschmiert, wenn ich es aus Delphi heraus starte, sonst aber nicht... Teilweise gibts da schon Eigenheiten...

DP-Maintenance 24. Jun 2010 11:30

Dieses Thema wurde am "24. Jun 2010, 12:30 Uhr" von "SirThornberry" aus dem Forum "GUI-Design mit VCL / Qt / Common Controls" in das Forum "Algorithmen, Datenstrukturen und Klassendesign" verschoben.

taveuni 24. Jun 2010 13:17

AW: Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1031254)
Und zwar habe ich einen StartupThread, der eigentlich alle Sachen erledigt, die beim Start des Programms anfallen. Innerhalb dieses Threads wird ein weiterer erzeugt.

Nur nebenbei:
Wozu sollte das gut sein? Weshalb wird dieser 2. Thread nicht im Hauptthread erzeugt?
Beziehungsweise kann es sein dass Abhängigkeiten zwischen diesen beiden erzeugten Threads bestehen
und der erste vor dem zweiten terminiert wird?

Zitat:

Zitat von s.h.a.r.k (Beitrag 1031254)
Und lustigerweise hängt sich die IDE genau an der Stelle auf, an der ich diesen Thread starten will. Lasse ich das Programm jedoch ohne Debugger laufen, so klappt es einwandfrei.

Wenn Exceptions ausserhalb des Hauptthreads nicht explizit behandelt werden kann dies durchaus sein.
Die Exception wird nicht an den Hauptthread weitergeleitet und somit nicht sichtbar.

sirius 24. Jun 2010 13:24

AW: Thread in Thread erzeugen; ergibt das ein Problem bzgl. Handle?
 
Hallo shark,

dies stellt defintiv kein Problem dar. Dem Thread ist es auch völlig egal von wem er gestartet wird. Er verhält sich deswegen nicht anders.

Bzgl des Problems mit Delphi:
1. Hatten wir ja letztens schon, dass allocatehwnd nicht threadsicher ist. Vielleicht liegt es daran.
2. Was aber auch nicht "threadsicher" ist, ist der Debugger von Delphi. Soll heißen: Hier hat der Debugger Fehler und es muss nicht zwingend an deinem Programm liegen. Allerdings ist es generell schwer Threads zu debuggen.


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