![]() |
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... |
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 ![]() 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 ![]() P.S. Wenn du regelmäßig Application.ProcessMessages aufrufst, reagiert dein Programm auch ... |
Re: Fragen zu Threads: Prozedur als Thread ausführen
Zitat:
|
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:
|
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. |
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" ist die PAS-Datei, die den "Thread-Code" enthält (erstellt Mittels Delphi (Datei -> Neu...))
mCheck_Thread.TMyThread.Create(false);
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);". |
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. |
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. |
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?
|
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 17:18 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