Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Threading möglich? (https://www.delphipraxis.net/194545-threading-moeglich.html)

derseitzer 6. Dez 2017 11:04

Threading möglich?
 
Hallo Leute,
Ich habe ein Programm und hole mir in einer Funktion alle Informationen von einer Steuerung.
Das sind so viele Daten das ich das gesamte Programm für einige Sekunden lahmlegen würde, wenn ich mir alle Daten auf einmal holen würde.
Momentan hole ich mir nun die Informationen Stückweise, aber mich würde interessieren, ob es nicht möglich ist, alle meine normalen Funktionen Prozeduren und Timer etc. normal
laufen zu lassen und mithilfe eines anderen Kerns die Daten zu empfangen kurz: Multi-Threading. Würde das funktionieren?

Gruß derseitzer

TiGü 6. Dez 2017 11:10

AW: Threading möglich?
 
Die Glaskugel sagt:
Vielleicht! :glaskugel:

derseitzer 6. Dez 2017 11:12

AW: Threading möglich?
 
und ich hab nochmal eine blöde Frage :oops:
Ich habe Delphi 10 Seattle und habe in meiner Tool-Palette kein "TThread", bedeutet dass, das ich da schon wieder irgendeine Erweiterung brauche? :cry:

Uwe Raabe 6. Dez 2017 11:14

AW: Threading möglich?
 
TThread ist nicht von TComponent abgeleitet und kann daher in der Tool-Palette nicht auftauchen.

LTE5 6. Dez 2017 11:18

AW: Threading möglich?
 
Datei > Neu > Weitere > Delphi-Dateien > Thread-Objekt

derseitzer 6. Dez 2017 11:19

AW: Threading möglich?
 
Oh Dankeschön! Dann werde ich mich nun einarbeiten. Dnakeschön :-D

Mavarik 6. Dez 2017 11:52

AW: Threading möglich?
 
oder

Delphi-Quellcode:
TTask.Run(Procedure
begin
  Hole_Daten;
  TThread.Queue(NIL,Procedure
  begin
    Label1.Text := 'Daten da';
  end);
end);
Mavarik

derseitzer 6. Dez 2017 14:30

AW: Threading möglich?
 
Nun habe ich mich ein klein wenig eingearbeitet und habe ein paar Fragen

Meine Form:

Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread.Create(False);
end;
Mein TThread:

Code:
procedure MyThread.Execute;
begin
FreeOnTerminate := TRUE;
showmessage('hi');
sleep(5000);
Also ich wollte hier mal testen ob meine Form freazed wenn ich den sleep befehl im Thread nutze und das passiert nicht, so wie erhofft :-D
1. Frage: Stimmt das so, dass ich den Befehl MyThread.Create(False) zum starten meines MyThread.Executes benutze?
2. Frage: angenommen ich hole mir in "MyThread.Execute" nun Daten z.B. A:= Data1, B:=Data2 usw., dann würde meine Form nicht einfrieren (gehe ich von aus,da sie beim sleep Befehl auch nicht einfriert). Inwieweit beeinflusst mein Thread denn nun das ausgeführte Programm meiner Form (ich denke bzw. hoffe, die Antowrt ist garnicht mehr)?
3. Wird nun gleichzeitig die prozedur mythread.execute und z.b. eine prozedur meiner Form1 ausgeführt?
4.angenommen das Daten holen mithilfe des Threads dauert 10sekunden aufgrund der Massen an Daten, woher weiß ich wo ich gerade bin und was ich schon mit meiner Form verarbeiten kann?

Vielen Dank schon im voraus an alle die Ihre Zeit für mich opfern :oops:
Vielen Dank und freundliche Grüße,
derseitzer

Mavarik 6. Dez 2017 14:36

AW: Threading möglich?
 
Meine Antwort gelesen?

TiGü 6. Dez 2017 14:38

AW: Threading möglich?
 
Na, wie werden Objekte in Delphi richtig erstellt? Bitte nochmal überlegen!

Und schaue dir bitte Seite für Seite dieses kleine Tutorial an:
https://www.delphi-treff.de/tutorial...ascal/threads/

4dk2 6. Dez 2017 14:39

AW: Threading möglich?
 
Ich glaube du solltest dir erstmal Grundsätzlich durchlesen was Threads im allgemeinen sind,
und nicht drauf los programmieren.
Da du Seattle hast wäre für dich sicher die Paralls Lib sinnvoller.

http://docwiki.embarcadero.com/RADSt...amming_Library

Trotzdem. erstmal informieren was Threads sind.

himitsu 6. Dez 2017 14:42

AW: Threading möglich?
 
Zitat:

Delphi-Quellcode:
  MyThread.Create(False);
end;

Wollte erst TMyThread sagen, bis ich das sah
Zitat:

Delphi-Quellcode:
procedure MyThread.Execute;
begin

:shock:

ShowMessage im Thread niemals,
außer du synchronisierst das. Delphi-Referenz durchsuchenSynchronize

derseitzer 6. Dez 2017 14:53

AW: Threading möglich?
 
Das showmessage habe ich nur gemacht um zu sehen, ob mein execute überhaupt ausgeführt wird - das gibt es nachher sowieso nicht mehr.
Und ja ich dachte beim Erstellen das Delphi mir das "T" für TThread schon mitgeben wird.. hat es aber nicht :lol:
Ich weiß was Threads sind, aber programmieren kann ich deshalb trotzdem noch keine :cry:

Luckie 6. Dez 2017 15:51

AW: Threading möglich?
 
Und die VCL ist nivht threadsafe. Deswegen ist der Aufruf von ShowMessage nicht die beste Idee.


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