AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi String von Thread an Programm senden - Stilfrage!
Thema durchsuchen
Ansicht
Themen-Optionen

String von Thread an Programm senden - Stilfrage!

Ein Thema von TheMiller · begonnen am 22. Feb 2008 · letzter Beitrag vom 25. Feb 2008
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#11

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 00:04
Hallo,

hab jetzt doch noch eine Frage. Und zwar verstehe ich nicht, wie der Thread oder das Mainform mit der Klasse arbeitet. Ich habe die Klasse da stehen, aber wie verändere ich jetzt via Thread oder MainForm variablen? Und wo liegen diese Variablen?

Ist es so, dass diese Variablen IN der Klasse liegen und auch DORT verändert werden? Der Thread greift dann auf die Klasse zu und nimmt sich die Variablen? Wo wird die Klasse erstellt und instantiiert?

Hab das jetzt alles gesehen und im Kopf verarbeitet, aber die Klasse steht da immernoch (in mir drin) zusammenhanglos rum. Kann auch daran liegen, dass es schon ziemlich spät ist, aber ich versteh's nicht so ganz

Danke
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#12

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 05:11
Morgen,

ungefähr so müsste es sein:

Delphi-Quellcode:
type
  TForm1=class(TForm)
  private
    DataContainer: TContainer;

    DataContainerChange(Sender: TObject);
  end;

procedure TForm1.Create(Sender: TObject);
begin
  DataContainer := TContainer.Create;
  DataContainer.OnChange := DataContainerChange;
end;

procedure TForm1.DataContainerChange(Sender: TObject);
begin
  ShowMessage('Thread hat Daten verändert :-)');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Th: TMyThread;
begin
  Th: TMyThread.Create(True);
  // Th.s:=@s_thread;
  Th.DataContainer := DataContainer;
  Th.resume;
end;

Und im TThread.Execute kannst du dann eben mit
DataContainer.myVariable := 'threaddaten!'; Die Daten verändern, und der Hauptthread wird sogar über die Änderung informiert.

So habe ich es jedenfalls verstanden. Und der Code hier ist nur so geschrieben, bestimmt ein Fehler drin
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 09:08
Zitat von wicht:
So habe ich es jedenfalls verstanden.
So habe ich es auch gedacht (außer dass du vor der Deklaration von DataContainerChange noch "procedure" schreiben müsstest)

@DJ-SPM
Letztenendes ist dass nur in String in eine Klasse gakpaselt. Und die übergibst dann nur die Klasse und kannst den String von außen Threadsicher ändern.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#14

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 09:49
Das Beispiel ist klasse! Ich habe es jetzt glaub ich verstanden.

Zu dumm, dass ich es morgen testen kann, da ich jetzt auf eine Hochzeit im anderen Ende Deutschlands fahre

Naja, wird bestimmt auch lustig. Aber solche Prolematiken beschäftigen mich immer so lange, bis "ich" sie gelöst habe!

Danke jedenfalls!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#15

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 10:52
ich würde keine globale Variable nehmen sondern eine membervariable. Aber davon unabhängig reicht es wenn du den Zugriff auf den String mit einer CriticalSection absicherst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: String von Thread an Programm senden - Stilfrage!

  Alt 23. Feb 2008, 11:34
Zitat von SirThornberry:
Aber davon unabhängig reicht es wenn du den Zugriff auf den String mit einer CriticalSection absicherst.
Zitat von Sirius:
SimpleRWSync kapselt CriticalSections.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#17

Re: String von Thread an Programm senden - Stilfrage!

  Alt 24. Feb 2008, 14:40
Bin wieder da!!!

Nochmal eine Frage zur "Container-Lösung"... Habe sie jetzt implementiert und die Container-Klasse als Extra-Unit mit in den Thread und in die Applikation eingebunden. Du hast aber die Methode "setMyVariable" als private deklariert. So kann ich ja nicht vom Thread oder von UnitX auf diese Methode zugreifen - oder mache ich was falsch?

Vielen Dank nochmals für den Code!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: String von Thread an Programm senden - Stilfrage!

  Alt 24. Feb 2008, 14:53
Dafür gibts ja das Property "myVariable". Dieses ruft im schreibenden Fall setmyVariable und im lesenden Fall getmyVariable auf.
Du solltest dir mal propertys anschauen, und wie die funktionieren

Du brauchst also nur myVariable zu nutzen. Schau dir mal an, was "wicht" geschrieben hat! (Da ist nur ein winziger Fehler drin)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#19

Re: String von Thread an Programm senden - Stilfrage!

  Alt 24. Feb 2008, 16:46
Ja, ich habe es genauso gemacht, aber auf diese Art und weise "hängt" sich der Thread auf, wenn ich die Variable ändere.

Thread:

Delphi-Quellcode:
public
  DataContainer: TContainer;
end;

procedure Execute(...)
begin
  DataContainer.myVariable:='Hallo';
end;
Hauptprogramm

Delphi-Quellcode:
Th := TMyThread.create(true);
Th.DataContainer:=dataContainer;
Th.Resume;
Doch der Thread wird nicht bis zum Ende ausgeführt und die DataContainerChange wird auch nicht aufgerufen. Liegt das daran, dass die Anwendung, die den Thread aufruft, eine DLL mit DLL-Form ist und per Windows.SetParent in das Hauptprogramm eingebunden wird?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#20

Re: String von Thread an Programm senden - Stilfrage!

  Alt 24. Feb 2008, 16:50
Hmm... Vielleicht liegts daran:

Im Thread=>SetMyVariable=>OnDataChange-Ereignis wird ausgelöst=>Im OnDataChange-Event wird die VCL benutzt => *aufhäng*
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 16:57 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