AGB  ·  Datenschutz  ·  Impressum  







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

TTimer nicht Thread-safe

Ein Thema von hzzm · begonnen am 6. Feb 2018 · letzter Beitrag vom 6. Feb 2018
Antwort Antwort
Seite 1 von 2  1 2      
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#1

TTimer nicht Thread-safe

  Alt 6. Feb 2018, 10:05
Delphi-Version: 10 Seattle
In diesem SO-Thread schreiben die Antwortenden, dass man TTimer in Threads vermeiden sollte:

SO: Threaded TTimer

Meine Frage zu dieser Sachlage:
Wenn der TTimer im Thread-Objekt liegt und aktiviert wird, sind AV's nicht auszuschliessen;

Was ist, wenn das TTimer-Objekt ausserhalb des Threads in einem Objekt im Haupt-Programm liegt, erstellt wird und nur aus einem Thread angestossen wird?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 10:09
Auch schlecht. Man greift aus einem Thread nicht auf Objekte außerhalb des Threads zu.
Erst Recht nicht auf VCL Komponenten.

Warum brauchst du überhaupt einen Timer in einem Thread?
Kannst du dir doch quasi im Thread selbst bauen oder nicht?
Da es ja nur ein Thread ist kannst du ja einfach ne Schleife mit sleeps machen oder?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 10:20
Es könnte hilfreich sein, deine Anforderung zu beschreiben, dann kann man dir eventuell besser Hinweise geben, wie du es lösen kannst.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 10:31
Danke fuer die Hinweise.

Ja, ich kann es auch mit Sleep loesen.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
675 Beiträge
 
FreePascal / Lazarus
 
#5

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 10:59
Sleep in einem Thread ist auch nicht gut. Wenn das System runter fährt, benachrichtigt es Dein Programm, das muss sich in einer kurzen Zeit beenden können, sonst wird es als eingefroren angezeigt.

Und auch wenn der Benutzer Dein Programm schließt, will er nicht erst warten, bis ein Sleep in irgend einem Thread beendet ist (mal davon ausgehend, dass Du beim Beenden des Programmes mit den Threads ordentlich aufräumst).

WaitForSingleObject eignet z.B. sich wunderbar, um auf Ablauf einer Frist aber eben auch alternativ auf ein Signal zu reagieren, damit hängt der Thread dann bei seiner Auflösung auch nicht mehr lästig.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 11:01
Sleep in einem Thread ist auch nicht gut. Wenn das System runter fährt, benachrichtigt es Dein Programm, das muss sich in einer kurzen Zeit beenden können, sonst wird es als eingefroren angezeigt.
Aber nur wenn sein Programm so geschrieben ist dass es beim Beenden auch sauber auf das Beenden des entsprechenden Threads wartet

Ansonsten beendet sich das Programm direkt
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 11:37
Auch schlecht. Man greift aus einem Thread nicht auf Objekte außerhalb des Threads zu.
Erst Recht nicht auf VCL Komponenten.
Wie waere denn ein korrekter Aufbau fuer folgendes Szenario (grundasetzlich, ohne TTimer):

Eine TForm hat eine Status-Anzeige einer Verbindung.
Die Verbindung wird selbstverstaendlich Threaded aufgebaut, damit die Anwendung nicht einfriert.
Die Status-Anzeige der TForm soll anzeigen, ob der Verbindungs-Aufbau gerade in der Suche ist, oder bereits erfolgreich war.

Ist es so ueberhaupt vermeidbar, aus dem Thread auf die VCL-Statusanzeige zuzugreifen?
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 11:51
Man könnte hier doch einen Timer nutzen um den aktuellen Zustand des Threads in der Statusbar anzuzeigen.

Der Timer wäre damit nicht in dem Thread sondern in der GUI.

Alternativ kann man auch eine message an das Hautpfenster von Thread aus schicken, asynchron mit PostMessage. Diueses kann dann updaten wenn es idle ist.
  Mit Zitat antworten Zitat
hzzm

Registriert seit: 8. Apr 2016
103 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 12:03
Laut der Antwort in String data from Thread to Main koennte man doch die Aktion der Status-Anzeige .Queue'en, oder nicht?

Kann man infolge dessen nicht auch den Anstoss eines TTimers aus einem TThread ohne AV-Gefahr .Queue'en?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: TTimer nicht Thread-safe

  Alt 6. Feb 2018, 12:04
Wenn Threads irgendwas nach außen zu funken haben, dann bekommen sie callbacks, die man entsprechend synchronisieren kann.

Wenns komplexer wird, dann einfach OTL oder so nutzen, da gibt es zig Mechaniken.

Laut der Antwort in String data from Thread to Main koennte man doch die Aktion der Status-Anzeige .Queue'en, oder nicht?
Genau - wobei ich lieber den eigentlichen Wert per callback rausgeben würde, das string zusammentackern kann dann dort gemacht werden.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Feb 2018 um 12:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:35 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