AGB  ·  Datenschutz  ·  Impressum  







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

Thread und Components

Ein Thema von arbu man · begonnen am 1. Aug 2006 · letzter Beitrag vom 9. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#1

Thread und Components

  Alt 1. Aug 2006, 20:53
Hi,

Ich habe einen Thread in den eine Componente erzeugt wird, wenn der Thread läuft wird bleibt das Programm stehen, dabei wird die Komponente mit Owner nil erzeugt, und im Thread wird alles mit Synchronize auf gerufen...

Warum bleibt das Hauptprogramm stehen ?

thx, Björn
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#2

Re: Thread und Components

  Alt 1. Aug 2006, 20:54
Kannst du uns bitte etwas Code zeigen?
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: Thread und Components

  Alt 1. Aug 2006, 20:57
Jo:
Delphi-Quellcode:
unit GLSI_DataModule;

interface

uses
  SysUtils, Classes, JvComponent, JvInterpreter_all, JvInterpreter;

type
  TInterpreterhread = class(TThread)
  protected
    procedure Execute; override;
  private
    PSender: TObject;
    PIdentifier: String;
    PValue: Variant;
    PArgs: TJvInterpreterArgs;
    PDone: Boolean;
  public
    Interpreter: TJvInterpreterProgram;
    procedure InterpreterGetValue(Sender: TObject; Identifier: String;
      var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean);
    procedure SyncGetValue();
    destructor Destroy; override;
  end;

type
  TGLSInterpreterModule = class(TDataModule)
    Interpreter: TJvInterpreterProgram;
    procedure InterpreterGetUnitSource(UnitName: String;
      var Source: String; var Done: Boolean);
    procedure InterpreterGetValue(Sender: TObject; Identifier: String;
      var Value: Variant; Args: TJvInterpreterArgs; var Done: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Thread: TInterpreterhread;
    Lines: TStringList;
    procedure CompileCode;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

var
  GLSInterpreterModule: TGLSInterpreterModule;

implementation

{$R *.dfm}

{ TInterpreterhread }

procedure TInterpreterhread.Execute;
begin
  Interpreter.Compile;
  Interpreter.CallFunction('main', nil, []);
end;

{ TGLSInterpreterModule }

procedure TGLSInterpreterModule.CompileCode;
begin
  Thread:= TInterpreterhread.Create(True);
  Thread.Interpreter:= TJvInterpreterProgram.Create(nil);
  Thread.Interpreter.Pas.Clear;
  Thread.Interpreter.Pas.AddStrings(Lines);
  Thread.Interpreter.OnGetValue := Thread.InterpreterGetValue;
  Thread.Execute;
end;

procedure TInterpreterhread.InterpreterGetValue(Sender: TObject;
  Identifier: String; var Value: Variant; Args: TJvInterpreterArgs;
  var Done: Boolean);
begin
  if (AnsiSameText(Identifier, 'delay'))or
     (AnsiSameText(Identifier, 'sleep')) then
  begin
    sleep(Args.Values[0]);
    Done := true;
    exit;
  end else begin
    PSender := Sender;
    PIdentifier := Identifier;
    PValue := Value;
    PArgs := Args;
    PDone := Done;
    Synchronize(SyncGetValue);
    Done := PDone;
    Value := PValue;
  end;
end;

procedure TInterpreterhread.SyncGetValue();
begin
  GLSInterpreterModule.InterpreterGetValue(
      PSender, PIdentifier, PValue, PArgs, PDone);
end;

procedure TGLSInterpreterModule.InterpreterGetValue(Sender: TObject;
  Identifier: String; var Value: Variant; Args: TJvInterpreterArgs;
  var Done: Boolean);
begin
  //
end;
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#4

Re: Thread und Components

  Alt 7. Aug 2006, 14:35
*push*

(jetzt darf ich wohl)
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Thread und Components

  Alt 7. Aug 2006, 14:42
wer ist denn der TInterpreter?!hread?

Nur zur Sicherheit, bitte nicht hauen:

Du erzeugst den Thread mit CreateSuspended = false oder startest ihn mit Resume und rufst NICHT ETWA Thread.Execute aus dem Mainthread heraus direkt auf? (obwohl das ja eigentlich sowieso protected sein sollte, oder? Ich seh jetzt hier aauch nirgends ein Execute; override; ?!

Hast du den Code hier reingetippt? Ich kann mir nicht vorstellen, dass der so kompiliert...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#6

Re: Thread und Components

  Alt 7. Aug 2006, 15:07
Nun ich habe ihn tatsächlich mit Execute aufgerufen

Habe das jetzt geändert...
Delphi-Quellcode:
procedure TInterpreterhread.Execute;
begin

  Interpreter:= TJvInterpreterProgram.Create(nil);
  Interpreter.Pas.Clear;
  Interpreter.Pas.AddStrings(GLSInterpreterModule.Lines);
  Interpreter.OnGetValue := InterpreterGetValue;

  Interpreter.Compile;
  Interpreter.CallFunction('main', nil, []);
end;

{ TGLSInterpreterModule }

procedure TGLSInterpreterModule.CompileCode;
begin
  Thread:= TInterpreterhread.Create(False);
end;
Nur leider stürzt nun das gesamte Programm komplett ab (mit Delphi)

TInterpreter ist eine NonVisuele Komponente
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Thread und Components

  Alt 7. Aug 2006, 17:04
Öhm... abstürzen sollte es nicht. Greifst du irgendwo auf Daten des hauptthreads zu? Die nichtvisuelle Komponente sollte eigentlcih auch keine Probleme machen, außer sie benutzt das Windows-Messaging. marabu hat da mal einen tollen Trick gezeigt:

TJvInterpreter.Create(THandle(-3)); Irgendwie erzeugt man damit ein Message-Only-Window... aber frag ihn wegen details
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#8

Re: Thread und Components

  Alt 7. Aug 2006, 17:12
Ja einmal: Interpreter.Pas.AddStrings(GLSInterpreterModule.Lines); Was muss man da denn beachten ?
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Thread und Components

  Alt 7. Aug 2006, 17:16
Naja, dass nicht zur selben Zeit der hauptthread versucht zuzugreifen und dass die instanz initialisiert ist.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#10

Re: Thread und Components

  Alt 7. Aug 2006, 17:29
So übergebe jetzt die Daten im constructor, aber wenn ich das Teil starte bleibt alles stehen und es kommmt eine Exception des Types "" mit der meldung "" (hat ich auch noch nie )

Aber der Trick mit den Handle klapt nicht der will ne TComponent haben
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:33 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