AGB  ·  Datenschutz  ·  Impressum  







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

Datenaustausch zwischen Thread und Hauptprogramm

Ein Thema von mischo22 · begonnen am 22. Nov 2012 · letzter Beitrag vom 4. Dez 2012
Antwort Antwort
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#1

Datenaustausch zwischen Thread und Hauptprogramm

  Alt 22. Nov 2012, 16:23
Hallo!

da die Hilfe mir nichts brauchbares ausgeworfen hat, hier meine Frage,
die mich schon seit geraumer Zeit beschäftigt:


Ich habe ein Programm, welches beim Start ein Thread startet. Dieser Thread soll eigenständig
Daten von einer seriellen Schnittstelle abfragen bez. Senden.

Dazu müssen zwischen Thread und Hauptprogramm Daten übertragen werden (Syncronisiert!).
Dem Thread muss u.A. die COM-Port Parameter übergeben werden, und die Info, ob Connected werden soll
Der Zhread muss nun beim Empfangen von bestimmten Daten seinerseits Werte zurück an das Hauptprogramm
geben, z.B. ein Temperaturwert, der zuvor empfangen wurde.


Es gibt nun drei Lösungsansätze:

1. Variablen liegen im Hauptsprogramm. Der Thread greift darauf zu.
2. Variablen liegen im Thread, deklariert im public Abschnitt
3. Variablen liegen im Thread, deklariert als "property" im public Abschnitt

Wie gesagt, alles muss syncronisiert sein.


Wie kann ich das am geschicktesten machen?
Müssen Variablen auch syncronisiert werden oder nur Objekte?


Vielen Dank schon mal vorab für eure Unterstützung.


Grüße
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 22. Nov 2012, 16:27
Jeder Speicherzugriff muss synchronisiert erfolgen.
Und alles was etwas speichern kann belegt halt Speicher

Die Thread-Klasse bietet dafür Delphi-Referenz durchsuchenTThread.Synchronize oder (neuere Versionen) Delphi-Referenz durchsuchenTThread.Queue an.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#3

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 23. Nov 2012, 13:26
Hallo!

Ja, das mit Syncronize kenne ich.
Damit kann zumindest der Thread in variablen des hauptprogramms schreiben.
Nur wie geht es umgekehrt?.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 23. Nov 2012, 13:31
@mischo22
wenn der Thread synchronized liest und schreibt, braucht man kein umgekehrt.
Aber vielleicht kann Sir Rufo noch mal die verriegelten Getter und Setter hier beschreiben.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 23. Nov 2012, 18:49
oh männo ... immer ich, die lisa war noch gar nie niemals dran

Gut das wir aktuell so einen Thread-Property Beitrag im Angebot haben
http://www.delphipraxis.net/171750-t...der-nicht.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#6

AW: Datenaustausch zwischen Thread und Hauptprogramm

  Alt 4. Dez 2012, 12:52
Die Funktionsweise von Getter/Setter sind wir bekannt, aber auch hier stellt sich die Frage:
Sind Getter/Setter automatisch syncronisiert?

Ich denke nein!


Beispiel:

in der Thread-Klasse gibt es eine Variable "ComConnected", die signalisiert, dass der COM-Port connected wurde.
Um diese Variable aus dem Hauptprogramm lesen zu können habe ich die TThread-Klasse um ein Property Connected erweitert.
Dieser ruft ein Getter auf um den Wert aus der private-Variable "ComConnected" des Threads auszulesen und zu übergeben.


Code:
function GetConneted(): Boolean
begin
  Result:=ComConnected; // Nicht Syncronisiert!!!
end;
Und hier liegt der Hase im Pfeffer!
Diese Übergabe ist nicht syncronisiert. Und nun?
  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 07:33 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