AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread für einfache Funktionsauslagerungen

Ein Thema von ibp · begonnen am 20. Jun 2012 · letzter Beitrag vom 20. Jun 2012
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 12:54
Wie wäre es ohne sleep aber mit Triggerung durch einen Timer?
oder so:
Delphi-Quellcode:
while aMYThread.InProgress do
begin
  aMyThread.InProgres:=false; {ich hab das read gesehen.....}
  MeinInfoFenster.Action;
  Sleep(1000);
end;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 13:02
Warum kann Sleep nicht endlich aus der RTL rausgeworfen werden?

Deutlich besser ist WaitForSingleObject, dann lässt sich die "Wartepause" auch abbrechen (sonst z.B. nervig wenn bei Programmende einige Threads noch die eine oder andere Sekunde schlafen, beim System runterfahren, wenn man einfach nur abbrechen will...). Zum Beispiel mit einem Event (auf den man damit wartet).

Geändert von CCRDude (20. Jun 2012 um 13:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 13:12
Wird das Query wirklich im Thread ausgeführt. Denn wenn die Komponente in TThread.create erstellt wird, gehört sie zumindest noch dem Mainthread (müsste man überprüfen, wie die Komponente arbeitet.

Ansonsten: sleep vermeiden, steht ja schon da.


Edit:
Ich persönlich find es blöd, da die Hauptanwendung im Endeffekt wieder einfriert.
Sieht ja so aus, als ob das notwendig ist. Stichwort Splashscreen und Vorarbeiten beim Start.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 14:11
Hi ibp,

also so wie ich das sehe, würde ich im Thread auf jedenfall eine eigene Connection aufbauen. Außerdem sei beachtet, dass der Constructor des Threads im Kontext des aufrufenden Threads - also nach Deinem Beispiel wahrscheinlich des Hauptthreads - ausgeführt wird. Ich würde daher alle Speichersachen erst am Anfang von Execute erzeugen/anlegen und auch am ende von Execute freigeben.
[EDIT]Wurde ja schon so von sirius geschrieben [/EDIT]

Dann der Aufruf. Es gibt da eben zwei Möglichkeiten - die eine ist nach meiner Ansicht der lineare Ansatz mit warten auf Beendigung wie du es gemacht hast. Sleep ist dafür nach meiner Meinung schlecht ich würde eher aktives Warten machen -> mit z.B. sowas.

Der andere ist der Ereignisgesteuerte. D.h. zerteilen von start und ende. Es gibt eine Methode die den Start steuert und nach dem Start der Threads die Oberfläche in einen "Bitte warten Zustand" bringt und damit endet. Dem Thread wird noch eine Methode übergeben für Beenden - vielleicht mit einer Aussage wie erfolgreich das war was er tun soll. In dieser Methode wird dann die Bedienung der Oberfläche wieder frei gegeben z.B. Statusbar wird wieder geschlossen - und alles andere was noch so gemacht werden muss, nachdem die Aufgabe des Threads erledigt ist.

Gruß, Chris

[EDIT]
Endlosschleife würde ich über das OnTerminate-Event des Threads verhindern mit einer lokalen Variable in der Anwendung. Diese Variable wird bei OnTerminate gesetzt und neben InProgress mit abgefragt while MyThread.InProgress and l_IsRunning do [/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules

Geändert von ChrisE (20. Jun 2012 um 14:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#5

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 14:23
also das Sleep war nur für das Infofenster, weil das so gerannt ist, das würde entsprechend noch angepasst werden und damit fliegt das Sleep wieder raus.

MeinInfoFenster.Action; aktualisiert eigentlich nur nach einer bestimmten Anzahl von Aufrufen das Info-Fenster.

Showmessage steht da nur zu Testzwecken!

Brauche ich den ein Synchronize wenn Thread.Exceute abgearbeitet wurde?
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 14:27
Brauche ich den ein Synchronize wenn Thread.Exceute abgearbeitet wurde?
Wie meinst du das? Wenn du im Execute des Threads etwas ausführst, dass etwas "verändert" was z.B. dem Hauptthread gehört, sollte das mit Syncronized aufgerufen werden - ja. Oder hab ich das jetzt falsch verstanden?

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#7

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 14:35
ja das tut der Thread aber nicht, das einzige was ich brauche ist der Zugriff auf den Status von fInProgress.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:41 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 by Thomas Breitkreuz