AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?
Thema durchsuchen
Ansicht
Themen-Optionen

[VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

Ein Thema von 4dk2 · begonnen am 3. Apr 2017 · letzter Beitrag vom 3. Apr 2017
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 09:11
Na ja, der Ansatz ist halt schon etwas auf dünnen Eis gebaut.
Einfach mal das Forum nach dem Stichwörtern Mainthread, VCL und threadsafe abklappern, zum Beispiel hier:
http://www.delphipraxis.net/179429-v...read-save.html
http://www.delphipraxis.net/83472-th...l-zugriff.html

Für D7 kannste auch GetCurrentThreadId aus der Windows.pas nehmen.
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#2

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 09:38
Na ja, der Ansatz ist halt schon etwas auf dünnen Eis gebaut.
...
Für D7 kannste auch GetCurrentThreadId aus der Windows.pas nehmen.
Bei D7 gab es das Queing noch nicht.

Ich bin bei der Komponenten Programmierung einfach nicht tief genug drin
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#3

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 10:35
Hab jetzt noch nen paar themen, und auch eine links dazu gelesen, und du hast recht es
ist einfach nur sinvoll wenn man es per:

Antwort: Queue oder Synchronize benutzen

macht,
für D7 geht das hier dann:
http://www.uweraabe.de/Blog/2011/01/...th-parameters/
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.079 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 12:04
Es wäre eigentlich am gescheitesten, wenn du ein Logging unabhängig von einer Komponente entwickelst!

Irgendeine globale Logging-Instanz, die dann wahlweise in einer VCL-Komponente, als Textdatei, ins Windows-Eventlog, über das Internet zu einen Server oder oder oder...dir die Log-Einträge wegschreibt/zur Anzeige bringt.

Oft braucht man den Zugriff auf die Einträge visuell direkt im Programm und dann später als Textdatei zum analysieren. Da würde es sich anbieten einfach beide Wege gleichzeitig bedienen zu können. Stell dir die Logging-Instanz als Singleton vor, an dem sich verschiedene Listener anmelden können, die dann den jeweiligen Weg entsprechend implementieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#5

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 12:21
"merkwürdig": auf nichtexistierende Objekte und dann auch unsyncronisiert (deine CriticalSection kennt die VCL nicht, also mußt DU dich mit Ihr synchronisieren) zuzugreifen ist nunmal ungünstig, aber das wurde ja schon behoben.

Und wenn du dennoch auch vorher Loggen willst, dann solltest du eben in eine Liste Loggen und die Anzeige holt sich dann später die Einträge da raus.
* wenn sie existiert und bereit ist
* und du kannst dir dann auch die Synchronisiation mit der VCL sparen (also beim Loggen ... beim Auslesen auch nur noch mit deiner CS synchronisieren)
* entweder schaut der VCL-Log regelmäßig (pollen) nach, ob es was Neues gibt, oder es wird z.B. eine Message gesendet (PostMessage), dass es nun was zum Abholen gibt
Also entsprechend dem Vorschlag von TiGü.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#6

AW: [VCL] TCustomControl, Welche Methode für Komponente um empfangsbereit zu sein?

  Alt 3. Apr 2017, 12:48
@TiGü
Grundsätzlich ist es nicht abhängig von irgendeiner Komponente,

Es handelt sich aber auch um eine Firmeninternes Logging.

Es basiert auf der LogEngine, die unterschiedliche Storages erlaubt (Text Datei, Datenbank)
Und beliebig viele unterschiedliche Anzeigen.
Erweitert da ist es im Prinzip ein Grid,
und Einfache Darstellung, dort ist es die Listbox mit der Problematik.

Die Engine ansich habe ich bewusst nicht als Singleton gemacht, bzw gibt es eine abgeleitete Variante die Singleton ist.
Aber danke für deine Tips

@himitsu
Syncronisieren per Liste + CS + Message, hatte ich auch dran gedacht, war ich aber wohl zu faul für
Und da ich keinerlei Probleme hatte, wenn die Anwendung läuft, nur im Create Bereich kam es dann zu den Problemen.


Im Endeffekt finde ich die Lösung per Thread.Queue auch am einfachsten
  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 22:28 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