AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thread)

Frage zu Threads (ObjectList mit Klassen, jede Klasse hat Variablen + ggf. 1 Thread)

Ein Thema von a.def · begonnen am 14. Apr 2017 · letzter Beitrag vom 15. Apr 2017
Antwort Antwort
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#1

AW: Frage zu Threads generell (ObjectList mit Klassen drin und jede Klasse hat 1 Thre

  Alt 14. Apr 2017, 20:21
Was möchtest du denn tun? Bzw was ist dein Ziel?

Ich versuche noch immer zu verstehen, was genau dein Problem ist.

(totally unrelated zu Interfaces: Ich glaube, dass du grundsätzlich das Prinzip von Interfaces schon verstanden hast, wenn du ein bisschen Objektorientierung verwendet hast; Interfaces sind nichts anderes als Klassen ohne Implementierung. Habe keine Angst davor! Der Vorteil ist nur, dass du manchmal flexibler bist; Die effektive Verwendung von Interfaces führt oft einfach dazu, dass dein Modell weniger stark zusammenhängt. Ich glaube aber dein Problem sitzt in dem Fall aber wo anders...)
Do you have the email of god??? --- I have to tell him that I'm happy to be born!

Geändert von BrightAngel (14. Apr 2017 um 20:26 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

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

  Alt 14. Apr 2017, 20:25
Zitat:
Aber ohne Interfaces
Er will es nicht und hat es auch schon in anderen Threads gesagt.
Lasst ihm seinen Willen

Ist ja auch nicht weiter tragisch.

gruss
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

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

  Alt 14. Apr 2017, 20:26
Mein Ziel grob erklärt:

mein hat eine ListView und jede ListView ist ein Datensatz. Jeder, ich nenne es mal "Eintrag", kann einen Thread im Hintergrund laufen haben, muss aber nicht.

Wenn aber ein Thread im Hintergrund für einen Eintrag laufen soll, dann wird meiner ObjectList über Add eine Instanz von TThreads übergeben.
Im Create von TThreads wird der eigentliche benötigte Thread erzeugt.

Über aThreadInfo.ThreadList.Items[i].itemX kann ich nun auf meinen Thread zugreifen. Über aThreadInfo.ThreadList.Items[i].VARIABLEXYZ auch auf Variablen der Klasseninstanz selber (nicht des Threads, der Thread ist itemX).

Ich möchte nun, dass mein Thread itemX auf Variablen der Klasseninstanz zugreifen kann, dem er (der Thread) angehört.

Aktuell haben bei mit itemX und itemY jeweils eine Variable, die den gleichen Zweck erfüllen. Deswegen dachte ich packe ich die in die Klasseninstanz dann habe ich nur noch eine.

Beispiel: aThreadInfo.ThreadList.Items[i].itemX.bPause würde den Thread (itemX) dann pausieren (setter). Hier wäre es aber besser eine einzige Variable zu haben, die ich aus beiden Teilen, itemX und itemY, abrufen kann.

Zitat:
Er will es nicht und hat es auch schon in anderen Threads gesagt.
Grund ist ganz einfach, dass ich Interfaces nicht verstehe und Code den ich nicht verstehe möchte ich nicht einbauen

Geändert von a.def (14. Apr 2017 um 20:29 Uhr)
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#4

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

  Alt 14. Apr 2017, 20:33
Wenn ich dich richtig verstanden habe, möchtest du innerhalb eines Threads auf ein Set von Variablen zugreifen, die für diesen Thread zur Abarbeitung seiner eigenen Tätigkeit wichtig sind. Was hindert dich daran, bei der Initialisierung des Threads diesen "Kontext", also eine Referenz auf dein übergeordnetes Objekt diesem zu übergeben? (also eine Referenz auf dein jeweiliges TThreads)
Do you have the email of god??? --- I have to tell him that I'm happy to be born!
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

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

  Alt 14. Apr 2017, 20:38
Zitat:
Wenn ich dich richtig verstanden habe, (...)
Hast du. Da ich exakt eine Variable pro Klasseninstanz aber in 2 Unterklassen brauche, habe ich aktuell pro Unterklasse eben diese Variable 1x.

Zitat:
(also eine Referenz auf dein jeweiliges TThreads)
Wenn man das machen darf, hört sich das gut an!

Ehrlich gesagt habe ich da jetzt nur spontan Pointer und Const im Kopf. Aber das ist es nicht, was du ansprichst, oder?

Woran ich auch gedacht habe ist, dem Thread eine ID mitzugeben (die ID des "items[i]"). Aber das würde mich sehr einschränken was Änderungen an den ObjectList-Items, also den Klasseninstanzen, angeht.
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#6

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

  Alt 14. Apr 2017, 20:45
Du kannst deinem Thread übergeben was dir beliebt. Es ist ja dein Programm
Oder dein TMeinThread hat eben entsprechende (u.U. private) Felder, die im Construktor mit übergeben werden, auf die du dann von Execute aus Zugriff hast.
Wenn die Variablen auch nur dort relevant sind, kannst du diese vielleicht auch aus TThreads dorthin verschieben und dann auch von dort darauf zugreifen?

Vermute ich das richtig, dass deine Referenz itemX auf deinen Thread in TThreads nur deshalb existiert, damit du diesen noch von außen abbrechen kannst/den Status rausfinden kannst? Existieren TThreads Einträge in deiner Liste, deren itemX nil ist?

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!

Geändert von BrightAngel (14. Apr 2017 um 20:54 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#7

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

  Alt 14. Apr 2017, 20:49
itemX ist die Instanzvariable des Threads und mit aThreadInfo.ThreadList.Items[i].itemX.bPause lege ich den Thread schlafen (ich prüfe einfach auf while bPause do ... (bPause, property, Boolean steht in der Unit des Threads)

Habe gerade das hier gefunden und gucke es mir gleich mal an.
http://stackoverflow.com/questions/3...-pass-by-value

Demnach kann ich dann ja ... ok muss ich gleich gucken wenn ich wieder eine IDE habe.. gucke ich gleich welches Object ich als Parameter übergeben kann.


Edit.

wenn ich den constructor habe

Delphi-Quellcode:
constructor TThreads.Create(...);
begin
...
 itemX := TMeinThread.Create(...); // <== HIER
...
end;


aThreadInfo.ThreadList.Add(TThread.Create(...));
Da müsste ich dann ja die Referenz übergeben. Wäre das hier, haut mich nicht.. aber wäre das nicht "Self" (constructor)?

Geändert von a.def (14. Apr 2017 um 21:06 Uhr)
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#8

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

  Alt 14. Apr 2017, 21:05
Ah. Ich wusste unser Problem liegt wo anders
Ja, also wenn du ganz klassisch (so wie bei einem ganz normalen Funktionsaufruf, in Konstruktoren, ...) ein Objekt mit übergibst, dann ist das nur eine Referenz auf dieses Objekt. Intern übersetzt dir dein Compiler das oft einfach nur in Pointer auf das Objekt. Also genau wie indem stackoverflow Beitrag beschrieben... Dich hindert niemand daran, diese Referenz in mehreren Instanzen oder/und in mehreren Feldern zu halten. Nur aufpassen beim Free usw: Wenn du natürlich das Free auf einer dieser Referenzen aufrufst, dann werden die anderen logischerweise auch davon betroffen sein!

Brighty

Edit: genau. TMeinThread.Create braucht halt im Konstruktor noch entsprechend den Parameter. Was du hier aber jetzt machst ist das klassische Beispiel einer zirkulären Referenz: dein TMeinThread kennt TThreads und TThreads kennt TMeinThread. Wenn du das auflösen willst, sag bescheid; da gibt es einen kleinen Trick.
Do you have the email of god??? --- I have to tell him that I'm happy to be born!

Geändert von BrightAngel (14. Apr 2017 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:15 Uhr.
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-2025 by Thomas Breitkreuz