AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi mehrere funktionsparameter bei beginthread übergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere funktionsparameter bei beginthread übergeben?

Offene Frage von "griever"
Ein Thema von griever · begonnen am 8. Mär 2009 · letzter Beitrag vom 9. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#11

Re: mehrere funktionsparameter bei beginthread übergeben?

  Alt 8. Mär 2009, 23:36
Zitat von sirius:
Und man kan die Threadfunction aucvh gleich asl Methode der zugehörigen Klasse nehmen:
Hast du das schon mal so gemacht?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: mehrere funktionsparameter bei beginthread übergeben?

  Alt 9. Mär 2009, 11:36
Zitat von Luckie:
Zitat von sirius:
Und man kan die Threadfunction aucvh gleich asl Methode der zugehörigen Klasse nehmen:
Hast du das schon mal so gemacht?
Ja.
Delphi-Quellcode:
//Hier als Aufsatz für die Klasse TDirectory, welche (im Constrcutor) ein Verzeichnis samt Unterverzeichnisse durchforstet
//und dafür bekanntlich ein Weilchen braucht:

type
  TSearchThread=class
      Constructor Create(aParent: TDirectory; const aName:String;
                            aFileNotify:TFileNotify=nil;
                            aOnFinished:TDirectoryNotify=nil); reintroduce;
      Destructor Destroy; override;
    private
      FName:string;
      FNotify:TFileNotify;
      FWnd:Hwnd;
      FParent:TDirectory;
      FThreadID:Cardinal;
      FonFinished:TDirectoryNotify;
      procedure WndProc(var Message:TMessage);
      procedure Notify(aFile:TFile);
      function ThreadProc:Integer;
      procedure DoNotify(aFile:TFile);
  end;

...


constructor TSearchThread.Create(aParent:TDirectory; const aName: String;
  aFileNotify: TFileNotify; aOnFinished:TDirectoryNotify);
begin
  inherited Create;
  FParent:=aParent;
  FName:=aName;
  FOnFinished:=aOnFinished;
  FNotify:=aFileNotify;
  Fwnd:=Classes.AllocateHWnd(WndProc);
  BeginThread(nil,0,@TSearchThread.ThreadProc,self,0,FThreadID); //Here you are ;-)
end;

destructor TSearchThread.Destroy;
begin
  Classes.DeallocateHWnd(Fwnd);
  inherited;
end;

procedure TSearchThread.DoNotify(aFile: TFile);
begin
  if assigned(FNotify) then
    FNotify(aFile);
end;

procedure TSearchThread.Notify(aFile: TFile);
begin
  if assigned(FNotify) then sendmessage(Fwnd,WM_User,0,integer(aFile));
end;

function TSearchThread.ThreadProc: Integer;
var temp:TFileNotify;
begin
  if assigned(FNotify) then temp:=Notify
                       else temp:=nil;
  FParent.Create(FName,temp);
  PostMessage(Fwnd,WM_Close,0,0);
  result:=0;
end;

procedure TSearchThread.WndProc(var Message: TMessage);
begin
  case Message.msg of
    WM_User: DoNotify(TFile(Message.LParam));
    WM_Close: begin
      try
        if assigned(FOnFinished) then FOnFinished(self.FParent);
      finally
        self.Free;
      end;
    end;
    else
      DefWindowProc(Fwnd,Message.Msg,Message.WParam,Message.LParam);
  end;
end;


//Und der Start des Threads aus TDirectory:
constructor TDirectory.CreateThreaded
            (const aName: String; //Verzeichnispfad
             aFileNotify: TFileNotify; //Ereignis beim Finden einer neuen Datei
             aOnFinished:TDirectoryNotify); //Ereignis, wenn die Suche beendet ist
begin
  TSearchThread.Create(self,aName,aFileNotify,aOnFinished);
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: mehrere funktionsparameter bei beginthread übergeben?

  Alt 9. Mär 2009, 11:41
Ich frage nur, weil in BeginThread ja ein Funktionszeiger benötigt wird und kein Methodenzeiger.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: mehrere funktionsparameter bei beginthread übergeben?

  Alt 9. Mär 2009, 11:48
Es wird ein Pointer erwartet bzw. die CPU erwartet einen 32bit-Wert. Und das klappt problemlos.
Man muss halt nur als Parameter (lparam) den Objektzeiger mitgeben, denn die Methode hätte ja ganz gern genau diesen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:23 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