Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.470 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Informationsauswertung im Hintergrund

  Alt 3. Feb 2013, 09:30
Ich bin gerade dabei eine Modellbahnsteuerung zu schreiben.

Reicht es, wenn ich einen Timer einsetze, nach dessen Ablauf die Infos aus dem COMPort ausgewertet werden, Oder Ist der Timer auch durch das modale Formular bockiert?

Oder wäre Multithreading hier die bessere Lösung ? Hab ich allerdings noch nie gemacht.

Irgendwie sollte das Ganze im Hintergrund weiterlaufen.
Ein Timer funktioniert so, dass in den festgelegten Abstaenden von Windows Messages an das Programm geschickt werden. Das funktioniert immer, allerdings haengt es vom Programm ab, ob es darauf reagiert. Ein modaler Dialog ist kein Hinderniss, aber lange laufende Aktionen, z.B. das Lesen von grossen Dateien koennen schon dafuer sorgen, dass diese Messages verloren gehen oder verspaetet abgearbeitet werden.

Im Gegensatz dazu funktioniert ein Hintergrundthread immer, egal was der Hauptthread gerade macht, solange der Rechner nicht voellig ueberlastet ist. Der Nachteil ist allerdings, dass die VCL nicht threadsafe ist, man also vom Hintergrundthread nicht auf die GUI zugreifen darf. Ausserdem muss man sich Gedanken darum machen, welcher Thread wann auf interne Datenstrukturen zugreifen darf und das ggf. synchronisieren.

Fuer Dein aktuelles Problem duerfte ein Timer ausreichen, aber wenn Du es wirklich ernst meinst mit Deinem Projekt und der Verarbeitung im Hintergrund, solltest Du Dich so frueh wie moeglich mit Multithreading beschaeftigen. Je laenger du wartest, desto schwieriger wird es sein, Dein Programm umzustellen.

Irgendwas in einen Hintergrundthread laufen zu lassen ist einfach, schierig ist die Komplexitaet des Programmes zu beherrschen / debuggen, wenn vieles parallel ablaeuft. Multithreading ist nicht einfach. Es gibt allerdings diverse Bibliotheken, z.B. die OmniThreadLibrary, die einen dabei unterstuetzen.

twm
Thomas Mueller
  Mit Zitat antworten Zitat