AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Multithreaded/MultiprocessTabbed-UI - wie realisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreaded/MultiprocessTabbed-UI - wie realisieren?

Ein Thema von Codehunter · begonnen am 30. Apr 2018 · letzter Beitrag vom 8. Mai 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#1

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 30. Apr 2018, 09:16
Was genau versprichst du dir davon?
Ich habe schon verschiedene Tabbed-Anwendungen geschrieben, alle Single-Threaded. Solange praktisch alle Aufgaben der Anwendung anwendergetriggert sind, ist das überhaupt kein Problem.

Aber schon wenn man nur einen simplen Timer verwendet, um regelmäßig z.B. einen Dateiimport zu machen, spürt man anwenderseitig Verzögerungen. Gerade dieser Import geht gerne mal baden, weil die externen Zulieferer dieser Dateien (meist Anwendungen von Drittanbietern) erfahrungsgemäß immer mal wieder Nonsens abliefern. Das schickt meine Anwendung trotz großzügigem Gebrauchs von try-except immer mal wieder ins Nirvana.

Deshab habe ich den Dateiimport auch noch nicht in Threads ausgelagert. Denn dem Aufwand des Programmumbaus stand die Frage gegenüber, ob ich so nur das Problem der Reaktionslatenz beheben kann, weil soweit ich weiß eben gecrashte Threads die ganze Anwendung mitnehmen (lasse mich da gerne eines besseren belehren)

Anders als bei Webbrowsern wären die einzelnen Tabs nicht funktionsidentisch, sondern hätten spezialisierte Aufgaben (z.B. Lager, Artikelstamm, Stammdatenbearbeitung etc.). Diese grundlegende Programmstruktur ist so schon vorhanden, müsste also nicht grundlegend umgebaut werden, wollte ich das ganze in einer Art Multiprocess-Design laufen lassen.

Aber weil Zeit und Geld eine enge Wechselbeziehung haben, wurschtel ich nicht einfach drauflos sondern hör mir gerne mal an was andere für Erfahrungen gemacht haben.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 30. Apr 2018, 09:21
Dann beschreibe doch mal mit fachlichem Vokabular, was man sich unter so einem "Crash" vorzustellen hat.

Wird da der Prozess-Speicher überschrieben und dadurch wird der laufende Prozess instabil, oder sprechen wir von einer simplen (und daher harmlosen) Exception?
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#3

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 30. Apr 2018, 09:38
Dann beschreibe doch mal mit fachlichem Vokabular, was man sich unter so einem "Crash" vorzustellen hat.

Wird da der Prozess-Speicher überschrieben und dadurch wird der laufende Prozess instabil, oder sprechen wir von einer simplen (und daher harmlosen) Exception?
Eines der für mich bisher ungelösten Probleme ist, dass ich für die importierten Daten (uneleganterweise Binär und nicht strukturiert) umfangreiche Plausi-Checks einbauen musste. Das habe ich inzwischen auch soweit im Griff, dass das Ganze defakto whitelisted arbeitet. Allerdings gibt es einige undokumentierte Chunks, die ich nur anhand eines Byte-Markers als solche erkennen kann. Deren Verarbeitung mache ich nicht selbst sondern übergebe den gesamten Speicherblock als Shared-Memory an eine zugelieferte DLL. Leider ist die Zusammensetzung der undokumentierten Chunks genauso unzuverlässig wie die der dokumentierten Teile. Meist läuft ein solcher Crash innerhalb der DLL dann auch einen Pufferüberlauf hinaus, seltener Zugriffsverletzungen.

Das kann man dem Zulieferer vorwerfen wie man will, die juckt das nicht weil "Gelassenheit durch Größe". Der Endanwender sieht nur die Zuverlässigkeit des Gesamtkonstrukts, auf dem unser Logo pappt.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
TiGü

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

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 2. Mai 2018, 10:05
Wäre es nicht sinnvoll, dann den Import per abgesetzten Prozess anzustoßen? Dann kann der kleine Import-Prozess mit der DLL abstürzen wie er will und du kannst ihn von außen steuern.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#5

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 2. Mai 2018, 11:25
Hängt euch nicht zu sehr an der Importproblematik auf. Das war letztlich nur der Stein des Anstoßes. Das Thema als solches, also grundlegend, hat mich interessiert. Also wie man, so man das wollte, eine Multi-Prozess-Anwendung mit Tabbed-UI sinnvollerweise konstruieren sollte und ob aus euren Erfahrungen heraus der Aufwand lohnt.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
TiGü

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

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 2. Mai 2018, 13:22
Mach es nicht! Der Aufwand ist nicht immens hoch. Hatten wir nicht neulich dazu einen Thread?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 2. Mai 2018, 14:15
Vor allem sind die MultiProcess-Umsetzungen nicht vorrangig wegen der Verbesserung durch Multithread entstanden, sondern wegen der Sicherheit von "unsicheren"/schrottigen Programmen/Codes.

Fehler in einem "Tab" sorgen nicht für den Absturz des gesamten Programms.
Und auch Fehler in punkto Sicherheit werden ausgeglichen, da getrennte Speicherbereiche und kein Zugriff auf Speicher der anderen Tabs (z.B. Passwörter/Verschlüsselung über Webseitengrenzen auslesen)


Multithread alleine bringt auch selten Vorteile, wenn/da die GUI-Frameworks oftmals nicht threadsave sind. Das umgeht man durch Multiprozess, da jeder seine eigenen globalen Objekte besitzt, falls man das nicht untereinander verknubblt.

Rechenintensive Dinge sollte man eh nicht im GUI-Thread machen, womit es selten Vorteile bringt das Wenige auch noch auf mehrere Threads/Prozesse zu verteilen.
Mit nur Multithread wird es sogar schlimmer, wenn man dann auch noch ständig synchronisieren muß.


OK, eines der Speicherprobleme bei 32 Bit wird auch behoben, da jeder Prozess seine eigenen 2/4 GB virtuellen Speicher besitzt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Mai 2018 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Multithreaded/MultiprocessTabbed-UI - wie realisieren?

  Alt 30. Apr 2018, 09:26
Das hört sich für mich allerdings auch eher so an als sollte man eher bei dem Teil der die Daten importiert und verarbeitet einsetzen. Sammele doch erst einmal solche Nonsens-Daten und stelle nach wie sich dein Programm verhält. (Noch besser: Schreibe Unit-Tests )

Du musst schon ziemlich wilde Dinge anstellen wenn das deine ganze Anwendung beendet. Was genau tritt auf? Eine Exception bis ganz nach oben sodass Windows dein Programm beendet? Wenn ja, was sagt der Windows Event Viewer dazu? Was dein Exception-Logging?


Anders als bei Webbrowsern wären die einzelnen Tabs nicht funktionsidentisch, sondern hätten spezialisierte Aufgaben (z.B. Lager, Artikelstamm, Stammdatenbearbeitung etc.).
Über was sollte deine IPC laufen? Vielleicht habe ich da zu wenig Erfahrung, aber ich sehe allein im Datenaustausch schon ziemlichen Aufwand und weitere Stellen wo es Probleme geben kann.
  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 03:53 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