Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TThread vs. TObject bzw. gleichzeitig vs. nacheinander (https://www.delphipraxis.net/56518-tthread-vs-tobject-bzw-gleichzeitig-vs-nacheinander.html)

Angel4585 7. Nov 2005 10:09


TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Hallo zusammen

Ich habe im moment noch kA von Threads und hab daher bisher alles mit Objects gemacht.

Jetzt will ich mal die Unterschiede der beiden wissen.

Also einer ist das Threads gleichzeitig Befehle ausführen können.
Also

Thread1 ruft prozedure x auf

zur selben zeit

ruft Thread2 prozedur Y auf

bei zwei Threads passiert das ganze Zeitgleich, bei Objects nacheinander, oder versteh ich das falsch?

Mfg Angel4585

Robert_G 7. Nov 2005 10:20

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Wenn du mit Objects Klassen meinst, kann ich dich beruhigen. TThread sieht für veflucht nach einer Klasse aus. ;)

Du vergleichst hier übrigens Äpfel mit tibetanischen Gebirgsziegen:
Beide Begriffe haben recht herzlich wenig miteinander zu tun. Threads erlauben es dir mehrere Abläufe gleichzeitig auszuführen.
Ob du deinen Code nun prozedural oder objekt-orientiert schreibst interessiert deine Threads wenig.

Bevor du dich mit Threads anlegst, sollte der Rest glasklar sein.
Multi threaded zu programmieren gehört sicherlich nicht zu den einfachsten Dingen. ;)

Angel4585 7. Nov 2005 10:24

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Ja, TThread ist eine Klasse, genauso wie TObject.

Wenn ich jetzt zwei neue Klassen ableite, heisst das bei Threads also das es automatisch "läuft"(Edit: bis ein bestimmter Zustand eintrifft) und ich nicht irgendwie einen Timer oder so brauche der mir alle paar Millisekunden eine Prozedur aufruft, oder?

Wieviele Threads kann man eigentlich gleichzeitig erstellen?

Luckie ist doch hier der Threadexperte oder?

neolithos 8. Nov 2005 05:20

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
TThread ist eine "schöne" Klasse, die die Thread-Api kapselt. Aber das Thema Thread hat rein gar nichts mit Klassen/Objekten/Proceduren im engeren Sinne zu tun.

Thread (zu dt. Faden) ist ein Programweg innerhalb des Processen (deiner Anwendung). Alles was im Context (als im Bereich) des Threads ausgeführt wird, ist nebenläufig (quasi Parallel) zu den anderen Threads in deinem Process.

Erstmal einen Kurzeinführung zu den Klasse Thread: Es gibt die wichtigen Methoden Execute, Suspend, Resume.

Execute:
Ist die Einstiegsmethode des Threads. Alles was hier gerufen wird oder getan läuft in diesem Thread ab. Wird diese Methode verlassen wird dieser Thread zu einem Zombie.

Suspend:
Stoppt die Ausführung eines Threads. Sie kann aber mittels...

Resume:
... später wieder fortgesetzt werden.


Nun zu der schlechten Nachricht; Threadprogrammierung ist keine banale Sache die man einfach mal so schnell lernen kann und es gibt Leute, die es meiner bescheidenen Meinung nach bis heute noch nicht begriffen haben. Aber nicht den Mut verlieren. Meine Meinung zählt sowieso nie :( :

Konzepte, die wichtig sind:
- Speicherverhalten
- Sperren (CriticalSection als erstes, der Rest ist für den Anfang nicht so wichtig -> Mutex, Semaphore)
- Nachrichten in Windows
- Synchronization
- Prioritäten
- Dead Locks

Eve. Nützliche Links:
http://www.luckie-online.de/Develope...mit_Delphi.pdf
http://hsg.region-kaiserslautern.de/...eads/index.php
http://www.dsdt.info/tutorials/threads/´
http://wiki.delphigl.com/index.php/T...Multithreading



btw.: Soviele wie das Betriebssystem verträgt. Bei WinXP eine riesen Anzahl. Es kommt immer darauf an wie sich die Threads veralten.

btw2.: So wie ich das sehe hast du das Thema Thread noch nicht verstanden, mach dich erstmal damit vertraut, bevor die ins blaue Schießt.

Angel4585 8. Nov 2005 11:57

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Also so schwer wie du sagst ist das doch garnicht, oder?

Also ich habe einen Thread:

Delphi-Quellcode:
TMyThread =class(TThread)
 private
 protected
  procedure Execute;override;
 public
 end;
eine Variable vom Typ TMyThread

Delphi-Quellcode:
MyThread : TMyThread;
und Mit folgender Zeile kann ich das ganze starten:

Delphi-Quellcode:
MyThread := TMyThread.Create(True);
MyThread.Resume;
in Execute steht z.B. folgendes:

Delphi-Quellcode:
procedure TMyThread.Execute;
begin
while not Terminated do
 begin
 sleep(10);//Damit der Rechner nicht komplett ausgelastet ist
 Synchronize(Prozedur)//Prozedur aufrufen
 end;
end;
(Bis jetzt war das ein kinderspiel) :stupid:
Was muss man jetzt noch wissen? :gruebel:

Ach ja man kann noch nen Konstruktor integrieren:

Delphi-Quellcode:
TMyThread =class(TThread)
 private
 protected
  procedure Execute;override;
 public
  constructor Create(x,y,z : integer);
 end;
.
.
.

constructor TMyThread.Create(x,y,z : integer);
begin
inherited Create(True);
end;
Aufruf ist dann folgender:

Delphi-Quellcode:
MyThread := TMyThread.Create(1,2,3);
MyThread.Resume;

neolithos 8. Nov 2005 21:30

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Kompliziert wird es wie schon, aber eve. nicht deutlich genug, gesagt, wenn gemeinsam genutzte Speicherbereiche ins Spiel kommen. Variablen auf die von unterschiedlichen Threads zugegriffen wird. Oder es um Rangfolgen geht.

Du hast aber schon die Spitze des Eisberges entdeckt. Es gibt aber noch viel zu entdecken. Oder wie die hier sagen: "dive into it".

Angel4585 9. Nov 2005 08:18

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
:thumb:

Jetzt wo du das so sagst denk ich mir irgendwie das man ne Sektion im Forum eröffnen sollte in denen solche grundlegenden Befehle bzw. der grundsätzliche Umgang für einzelne Klassen auf die Art wie ich es oben gemacht habe beschrieben werden sollte, also fast nur Quelltext und keine langen Romane wie es in den meisten Tutorials der Fall ist. Das würde echt weiterhelfen.

Der_Unwissende 9. Nov 2005 08:35

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Sorry, aber wem genau sollte das helfen?
Ich denke der Sinn eines Forums ist es gerade Tutorials mit Text zu füllen, so dass Leute die es lesen verstehen warum etwas gemacht wird.
Wenn hier jmd. der schon etwas (viel) weiter als du ist, was Threads angeht, hier eins seiner Programme postet, dann steigt doch einfach mal keiner durch.

Also mag ja sein, dass du jetzt hier ganz toll einen Thread erzeugt hast, aber denkst du denn, dass jetzt jmd. weiß warum du den mit MyThread.Create(True) anlegst? Also klar, man kann jetzt in die Hilfe schauen, aber mal ehrlich, eine Zeile Kommentar...
Jedenfalls wird gerade Threading sehr schnell sehr viel Komplizierter als das was du hier als Code gepostet hast. Was dir vielleicht noch gar nicht klar ist, ist wie kompliziert das Threading noch werden kann. So kann es zu einer Verklemmung kommen, die 100000 (nicht übertrieben) nicht auftritt, aber beim 100001ten mal.
Und einfach nur ein großes Stück Code, dass aus mehreren Klassen besteht, die irgendwelche Abhängigkeiten haben und auf gemeinsame Speicherbereiche zugreifen, na ja, wem hilft dass denn? Der Sinn ist es doch letztlich etwas verstanden zu haben und das geht nun mal nicht ohne den Text, der einfach mal erklärt warum man was macht.

Gruß Der Unwissende

Angel4585 9. Nov 2005 08:47

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Ne Zeile Kommentar mein ich ja garnicht.Klar kann man das reinschreiben und es ist auch sinnvoll. Allerdings wenn jemand nen Text von 10 Zeilen über den Hintergrund von Delphi schreibt ist das finde ich übertrieben. Man sollte die Sektion auch nur neben den Tutorials anlegen, für die etwas fortgeschritteneren User, die nur nochmal kurz sich die Syntax anschauen wollen.

Ich finde die ausführlichen Tutorials für den Anfänger schon sehr hilfreich, nur wenn man jetzt schon 2 Jahre programmiert und eben die Standardsachen kennt ist es manchmal nervig wenn da noch ellenlanger Text steht und es wäre in dieser Situation prktisch wenn man nur solchen Code hat

Der_Unwissende 9. Nov 2005 08:59

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Zitat:

Zitat von Angel4585
..., für die etwas fortgeschritteneren User, die nur nochmal kurz sich die Syntax anschauen wollen.

Hm, gute Idee. Ich glaube es wäre ja dann super, wenn Quellcode einfach als solcher markiert werden würde, dann kann ja der etwas fortgeschrittene Benutzer direkt an diese Stellen springen und der noch nicht so fortgeschrittene einfach zusätzlich den Text lesen. Aber hey, das gibt es ja schon :wink:

Angel4585 9. Nov 2005 09:23

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Also ich hab so eine "Sammlung" z.B. über das TThread-Object bisher nicht gesehen.
Es war kurz und das wichtigste war drin. Menschen die sich ohnehin mehr damit beschäftigen wollen werden auch sich mehr in diese Materie einlesen.
Aber eine Sektion wo wirklich speziell die Syntax der verschiedenen Klassen (in einem kurzen Thread über zwei drei Seiten)erklärt wird hab ich noch nie gesehen.

Ich meine gezielte Syntax wie

TStringList
Delphi-Quellcode:
sl:=TstringList.Create;
//mehr Code was man mit der Klasse wie machen kann
sl.free;
das ganze mit
z.B.
TObjectlist, TThread
oder Dinge wie
Ableiten von TObject
Delphi-Quellcode:
TMyOwnObject = class(TObject)
Und gerade bei z.B. Indy Komponenten wo es wiedermal Unterschiede zwischen den Versionen 10 und 9 gibt.

das fehlt mir echt irgendwie

sicher kann man die Forensuche benutzen, aber irgendwie ist eine Sektion die sich speziell auf solche Dinge konzentriert doch übersichtlicher

Chewie 9. Nov 2005 14:07

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Was sollte das bringen? Eine Referenz, wie man die Klassen verwendet, was welche Methoden und was welche Properties und Felder tun, findet sich in der Online-Hilfe bzw. in den Dokumentationen zu der jeweiligen Klasse.

Das Forum dient vorrangig dazu, Probleme, die bei der Benutzung auftreten, zu diskutieren bzw. zu beheben.

Angel4585 9. Nov 2005 14:41

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
ja es steht sicher für jedes einzelne propertie ein riesen artikel in der OH, aber das wichtigste zusammen auf einer Seite gibts eher selten..wenn überhaupt.
(Programmierer sind teilweise( :zwinker: ) faule Menschen)

Der_Unwissende 9. Nov 2005 14:56

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Gut, dann mal eine ganz einfache Frage, was denkst du denn ist das wichtigste an der Klasse TForm?
Und wenn ich auf einer Seite alle wichtigen Funktionen, die irgendwer irgendwann brauchen kann aufliste, dann möchte ich den Benutzer sehen, der einfach mal so raufschaut und dem dann klar wird, was er wie verwenden sollte.
Denke das ist und bleibt Sache der OH und die besteht auch völlig zurecht aus mehr Text als Code. Und glaub mir einfach, je komplexer die Klasse desto wichtiger die guten Kommentare und vielen Texte.

Ansonsten kann ich nur Chewie zustimmen, ein Forum ist ein Forum und keine zweite OH.

Wahrscheinlich wirst du auch noch merken (sobald ein noch weiter fortgeschrittener Programmier bist), dass man mit dem übernehmen von Code sich schnell viele Fehler in ein Projekt holen kann. So kannst du sicher die Aufrufkonventionen einer Methode bei deinem Vorschlag sehen, aber halt nicht die Einschränkungen. Wird irgendwo z.B. ein Integer übergeben, weißt du also dass da ein Integer übergeben wird. Aber welcher Wertebereich davon vielleicht verboten ist oder weitere Auswirkungen beim Aufruf der Methode blieben dabei verborgen und die sind immer dann wenn es um fortgeschrittene Dinge geht (z.B. das Geld dass du verdienen möchtest) alles andere als unwichtig. Was du gerne hättest mag ja für dich ganz nett sein, aber ich denke (ist halt nur meine persönliche Meinung), dass wird eigentlich eher weniger gebraucht.

neolithos 9. Nov 2005 20:39

Re: TThread vs. TObject bzw. gleichzeitig vs. nacheinander
 
Zitat:

Zitat von Angel4585
..., nur wenn man jetzt schon 2 Jahre programmiert und eben die Standardsachen kennt...

Zwei Jahre Programmieren bedeutet das du immer noch Anfänger bist.


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