AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fragen zu Threads: Prozedur als Thread ausführen
Thema durchsuchen
Ansicht
Themen-Optionen

Fragen zu Threads: Prozedur als Thread ausführen

Ein Thema von Whistler · begonnen am 26. Aug 2004 · letzter Beitrag vom 18. Sep 2004
Antwort Antwort
Seite 2 von 3     12 3      
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#11

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

  Alt 17. Sep 2004, 18:29
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...
mfg

Whistler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#12

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

  Alt 17. Sep 2004, 18:29
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 ...
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#13

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

  Alt 17. Sep 2004, 18:36
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!
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#14

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

  Alt 17. Sep 2004, 18:46
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.
mfg

Whistler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 17. Sep 2004, 19:12
Moin Whissi,

schau Dir das Beispiel doch noch mal genau an.
Die Methode die mit Synchronize aufgerufen wird ist eine Methode des Threads.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#16

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

  Alt 17. Sep 2004, 22:17
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);".
mfg

Whistler
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#17

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

  Alt 18. Sep 2004, 00:12
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.
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#18

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

  Alt 18. Sep 2004, 00:20
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.
mfg

Whistler
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#19

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

  Alt 18. Sep 2004, 00:25
Achso, ist Timer1 dann einer anderer Timer? Weil du ihn in pd_CheckAll ja nochmal deaktivierst, oder ist das die betreffende Timerprozedur?
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#20

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

  Alt 18. Sep 2004, 00:28
Form startet Timer.
Timer ruft CheckAll auf.
Check all ruft alle Sub-Routinen auf - u.a. die des Threads.
mfg

Whistler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 19:39 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