Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fragen zu Threads: Prozedur als Thread ausführen (https://www.delphipraxis.net/28560-fragen-zu-threads-prozedur-als-thread-ausfuehren.html)

Whistler 17. Sep 2004 18:29

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Mir geht's um folgendes:
Wenn ich die HASH-Summe erstellen lasse, reagiert das Programm in der Zeit nicht. Daher will ich einen zusätzlichen "Prozess" (=Thread) starten, der dies macht.

Die Formulierung "deaktivieren" habe ich genutzt, weil ich nicht will, dass während der Thread, welche die HASH-Summe erstellt aktiv ist, der User das Programm munter weiter bedienen kann...

jfheins 17. Sep 2004 18:29

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
:arrow: Wenn du das Hauptform während der Threadausführung nicht brauchst, brauchst du auch keinen Thread (nur am Rande)

Aber zu deinem Problem:
Ich benutze immer Das Objekt Delphi-Referenz durchsuchenTThread
In die Klassenmethode TThread.Execute kommt das rein, was der Thread machen soll
Alle Zugriffe auf die VCL müssen in seperaten Klassenfunktoionen erfolgen, welche mit Delphi-Referenz durchsuchenSynchronize aufgerufen werden müssen

P.S. Wenn du regelmäßig Application.ProcessMessages aufrufst, reagiert dein Programm auch ...

Assarbad 17. Sep 2004 18:36

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Zitat:

Zitat von Luckie
Und genau so bitte nicht!

Erstmal sollte man niemals direkt MSDN-Library durchsuchenCreateThread aufrufen.

Also IMO gilt dies nur, wenn man auch den Memory-Manager von Delphi benutzt. Die Aussage ist also sehr fallabhängig!

Whistler 17. Sep 2004 18:46

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Eine Frage zu "Synchronize":
Ich verstehe nicht ganz wann ich es aufrufen muss. Delphi sagt:
Zitat:

{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B.

Synchronize(UpdateCaption);

und UpdateCaption könnte folgendermaßen aussehen:

procedure TMyThread.UpdateCaption;
begin
Form1.Caption := 'Aktualisiert in einem Thread';
end; }
Nur daraus würde ich schließen, dass wenn ich z.B. den Wert einer Variable im Mainform aktualisieren mmöchte, ich im Mainform eine Procedure schreiben müsste, welche ich im Thread per "Synchronize(Form1.Prozedurname);" aufrufen würde - das kann ich nicht ganz glauben.

Christian Seehase 17. Sep 2004 19:12

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Moin Whissi,

schau Dir das Beispiel doch noch mal genau an.
Die Methode die mit Synchronize aufgerufen wird ist eine Methode des Threads.

Whistler 17. Sep 2004 22:17

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Guten Abend,

Danke für die Antworten. Noch komme ich aber nicht weiter.
Ich habe nun folgendes gemacht:

Das Hauptformular erstellt ein "frmCheck". Das Fenster bekommt "ShowModal" Status und nach 1sek werden die Prozeduren abgearbeitet. Unter anderem rufe ich folgendes auf:
Code:
mCheck_Thread.TMyThread.Create(false);
("mCheck_Thread" ist die PAS-Datei, die den "Thread-Code" enthält (erstellt Mittels Delphi (Datei -> Neu...))

Die Prozedur wird auch abgearbeitet, jedoch beim Beenden steigt das Programm mit einer Zugriffsverletzung aus. Delphi makiert dann die Zeile "Timer1.Enabled := false;" der Prozedur "TfrmCheck.pd_CheckAll".
Den Thread synchronisiere ich Mittels "Synchronize(frmCheck.CheckAll);".

scp 18. Sep 2004 00:12

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Dazu ein paar Fragen:
- Was heisst nach 1sek? Per Timer?
- Wenn ja:
o Wann wird der ausgelöst? Im OnCreate oder OnShow?
o Wird der Thread innerhalb der Timerprozedur ausgelöst?
o Wenn ja: Timer1.Enabled := false; vor dem erstellen des Threads setzen.

Whistler 18. Sep 2004 00:20

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Ja, per Timer.
User klick auf frmMain einen Button und frmCheck wird erstellt. Im FormCreate Ereignis wird der Timer auf Enabled gesetzt. Im OnTimer Ereignis wird zu erst der Timer deaktiviert und dann eine andere Prozedur ausgeführt und schließlich die Prozedur aufgerufen, die den Thread starten soll.

Also wird der Timer VOR der Ausführung des Threads deaktiviert.

scp 18. Sep 2004 00:25

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Achso, ist Timer1 dann einer anderer Timer? Weil du ihn in pd_CheckAll ja nochmal deaktivierst, oder ist das die betreffende Timerprozedur?

Whistler 18. Sep 2004 00:28

Re: Fragen zu Threads: Prozedur als Thread ausführen
 
Form startet Timer.
Timer ruft CheckAll auf.
Check all ruft alle Sub-Routinen auf - u.a. die des Threads.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Seite 2 von 3     12 3      

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