AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Variablen im Thread

Ein Thema von Fredyy · begonnen am 2. Jan 2008 · letzter Beitrag vom 3. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Fredyy
Fredyy

Registriert seit: 31. Mär 2005
Ort: Wilhelmshaven
46 Beiträge
 
Delphi 7 Personal
 
#1

Variablen im Thread

  Alt 2. Jan 2008, 14:44
Hi,
Ich habe das Problem, dass ich in der OnCreate Prozedur meines Form1 in Unit1 Variablen setzte, die ich in der Laufzeit meines Threads in Unit2 auslesen möchte, jedoch bekomme ich das irgendwie nicht hin, dass er die Variablen erkennt und hoffe nun auf eure Hilfe, wie ich die Variablen deklarieren muss damit es funktioniert.

danke

mfg
fredyy
Frederick B.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Variablen im Thread

  Alt 2. Jan 2008, 14:48
um das ganze objectorientiert zu halten solltest du nicht vom Thread aus auf Form1.irgendwas zugreifen sondern solltest dem Thread die Adressen der Variablen mitgeben bzw. die TForm1-Instanz.

Am besten du zeigst mal deinen bisherigen Quelltext damit wir sehen welchen Weg du bisher eingeschlagen hast und welche Weiterführung da im sinnvollsten wäre.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Fredyy
Fredyy

Registriert seit: 31. Mär 2005
Ort: Wilhelmshaven
46 Beiträge
 
Delphi 7 Personal
 
#3

Re: Variablen im Thread

  Alt 2. Jan 2008, 14:58
also meine Form TForm1.FormCreate in Unit1 sieht so aus und die variablen hpstart,hpend,field und url möchte ich im Thread weiter verwenden.
Delphi-Quellcode:

  private
    Thread1 : TMyOwnThread;
  public
    filename,link,link2,hpstart,hpend,field,url :string;
    function Ready : Boolean;
  end;

.....

procedure TForm1.FormCreate(Sender: TObject);
begin

   hpstart := 'value="[URL=http://imageshack.us][IMG]';
   hpend := '[/IMG][/URL]"/>';
   field := 'fileupload';
   url := 'http://load.imageshack.us/';
   filename := 'screenshot';
   OpenDialog1.Filter := 'Image File Types|*.jpg;*.jpeg;*.png;*.gif;*.bmp;*.tif;*.tiff';

   if(ParamCount > 0) then
       Upload(ParamStr(1))
end;
die execute Prozedur vom Thread so, der Thread wird erst erstellt, wenn er benötigt wird:

Delphi-Quellcode:
procedure TMyOwnThread.Execute;
var
   x,y: Integer;
   hpstart,hpend, page,link :string;
   Werte : TIdMultiPartFormDataStream;
begin

            Werte := TIdMultiPartFormDataStream.Create();
            HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
            Werte.AddFile(field, files, 'image/png');
            page := Http.Post(url, Werte);
            Werte.Destroy;
            x := pos(hpstart, page);
            y := pos(hpend, page);
            link := copy(page, x+length(hpstart), y-(x+length(hpstart)));


        if Assigned(OnThread) then
                OnThread(link);
end;
das Problem ist jetzt, dass der Thread die Variablen nicht erkennt.

Danke schon mal für eure Hilfe

mfg
fredyy
Frederick B.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Variablen im Thread

  Alt 2. Jan 2008, 15:19
Gültigkeitsbereich von Variablen

Wenn das alles noch zu kompliziert ist, kannst du natürlich auch erstmal klein anfangen und das Forum nach Buchempfehlungen für Einsteiger durchpflügen. Dass du dich gleich an Threads wagst ist sehr mutig
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Fredyy
Fredyy

Registriert seit: 31. Mär 2005
Ort: Wilhelmshaven
46 Beiträge
 
Delphi 7 Personal
 
#5

Re: Variablen im Thread

  Alt 2. Jan 2008, 15:37
Zitat von Dani:
Gültigkeitsbereich von Variablen

Wenn das alles noch zu kompliziert ist, kannst du natürlich auch erstmal klein anfangen und das Forum nach Buchempfehlungen für Einsteiger durchpflügen. Dass du dich gleich an Threads wagst ist sehr mutig
Also wenn ich das Variablen System richtig verstehe sind die im "public" Bereich deklarierten Variablen doch die "Blauen" und die im "private" die "Grünen" also ist es doch richtig oder? o_O

Und zu den Threads, grundsätzlich funktioniert das Programm super doch wollte ich nun etwas umbauen bzw erweitern und dabei ist es ebend wichtig, dass die "Konstanten" des Threads zu Variablen werden die ich aus einer ini-Dateien auslesen möchte jedoch möchte ich nicht jedesmal neu aus der Datei lesen sondern einmal in die Variablen lesen und fertig und ebend jenes soll hier passieren, wenn die Variablen Übertragung funktioniert.
Frederick B.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Variablen im Thread

  Alt 2. Jan 2008, 15:52
Das Problem ist, dass dein TMyOwnThread-Objekt die Variablen [= Behälter] des TForm1-Objektes nicht "sehen" kann. Stattdessen hat jedes TMyOwnThread-Objekt eigene, von den TForm1-Variablen verschiedene Behälter. Die heißen zwar gleich, das bedeutet aber nicht, dass auch das Gleiche drin steht.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Fredyy
Fredyy

Registriert seit: 31. Mär 2005
Ort: Wilhelmshaven
46 Beiträge
 
Delphi 7 Personal
 
#7

Re: Variablen im Thread

  Alt 2. Jan 2008, 16:02
Zitat von Dani:
Das Problem ist, dass dein TMyOwnThread-Objekt die Variablen [= Behälter] des TForm1-Objektes nicht "sehen" kann. Stattdessen hat jedes TMyOwnThread-Objekt eigene, von den TForm1-Variablen verschiedene Behälter. Die heißen zwar gleich, das bedeutet aber nicht, dass auch das Gleiche drin steht.
.. und es gibt keine Möglichkeit die Variablen auch für das TMyOwnThread-Objekt Sichtbar zumachen? Oder die Daten irgendwie anderes zu übertragen?

Was mir gerade noch einfällt man könnte die Daten ja auch beim create-Aufruf das Threads als Attribut mit geben, doch das sind direkt mal 4 Variablen, dass ist bestimmt nicht die "sauberste" Lösung.
Frederick B.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Variablen im Thread

  Alt 2. Jan 2008, 16:18
Zitat von Fredyy:
Zitat von Dani:
Das Problem ist, dass dein TMyOwnThread-Objekt die Variablen [= Behälter] des TForm1-Objektes nicht "sehen" kann. Stattdessen hat jedes TMyOwnThread-Objekt eigene, von den TForm1-Variablen verschiedene Behälter. Die heißen zwar gleich, das bedeutet aber nicht, dass auch das Gleiche drin steht.
.. und es gibt keine Möglichkeit die Variablen auch für das TMyOwnThread-Objekt Sichtbar zumachen? Oder die Daten irgendwie anderes zu übertragen?

Was mir gerade noch einfällt man könnte die Daten ja auch beim create-Aufruf das Threads als Attribut mit geben, doch das sind direkt mal 4 Variablen, dass ist bestimmt nicht die "sauberste" Lösung.
Du musst erstens den Unitnamen der 1. Unit (die mit der Form) in die uses der 2. Unit (die Unit mit deinem Thread) einbinden, dann kannst du über Form1.URL drauf zugreifen.

Bedenke aber das das nicht OO ist, besser ist (woe SirThornberry schon sagte) die Thread-Instanz zu erzeugen und gleichzeitig die variablen zu übergeben.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  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
 
#9

Re: Variablen im Thread

  Alt 2. Jan 2008, 17:27
Du musst die Variablen nicht im OnCreate mitgeben.
Versuch's mal so:

Delphi-Quellcode:
Thread := TMyThread.Create;
Thread.Variable1 := Variable1;
[...]
Thread.Resume;
Also einfach als Eigenschaften des Threads. Du musst nur beachten, dass der Thread erst beim Resume() losläuft, und nicht schon im Konstruktor.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Variablen im Thread

  Alt 3. Jan 2008, 14:21
Zitat von wicht:
Du musst die Variablen nicht im OnCreate mitgeben.
Versuch's mal so:

Delphi-Quellcode:
Thread := TMyThread.Create;
Thread.Variable1 := Variable1;
[...]
Thread.Resume;
Also einfach als Eigenschaften des Threads. Du musst nur beachten, dass der Thread erst beim Resume() losläuft, und nicht schon im Konstruktor.
So lange es keine Zeiger auf die jeweilige Variable ist, oder das Objekt welches diese enthält, weiter gegeben wird, so lange werden sich Änderungen auf die Variable nicht auf ihren anderen Speicherort auswirken. Sprich: Änderst du Variable1 in deinem Thread, so hat die Variable1 in deiner Form immernoch ihren alten Wert (die Aussage ist reversible).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:55 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