Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Einfrieren des Programms verhindern (https://www.delphipraxis.net/102238-einfrieren-des-programms-verhindern.html)

Luckie 25. Okt 2007 14:43

Re: Einfrieren des Programms verhindern
 
Dann will ich auch mal Werbung machen: http://www.delphipraxis.net/internal...t.php?t=121360

Todd 25. Okt 2007 15:36

Re: Einfrieren des Programms verhindern
 
Danke für eure Antworten.

Leider bin ich kein Vollzeitprogramierer und habe eigentlich auch keine Zeit mich intensiv mit dem Thema "Threads" auseinander zusetzen. Es scheint nämlich ziemlich umfangreich zu sein.
Da fällt mir das ganz schön schwierig durchzublicken. :wall:

Könnte mir vielleich jemand einige Schritte auf die Schnelle klarmachen was zu tun ist?

Mein Problem: Anwendung bekommt vom Nutzer Daten.
1. Aufruf und Weitergabe der Daten an eine .dll.
2. Nach Rückgabe der Berechnungen -> Ausgabe

Bevor ich die .dll Aufruf muss ich einen neuen Thread erstellen, richtig?
Kann mir vielleicht jemand eine Art CodeSchnipsel bereitstellen.

Danke und liebe Grüße
Todd

wicht 25. Okt 2007 16:27

Re: Einfrieren des Programms verhindern
 
Tach!
Ich haue hier mal was ungetestetes für dich hin:

Delphi-Quellcode:
type
  TMeinThread = class(TThread)
  private
    FParentHandle: hWND;

    procedure Execute; override;
  public
    constructor Create(ParentHandle: hWND);
    destructor Destroy; override;
  end;

implementation

constructor TMeinThread.Create(ParentHandle: hWND);
begin
  inherited Create(True);
  FreeOnTerminate := True;
  FParentHandle := ParentHandle;
  Resume;
end;

procedure TMeinThread.Execute;
var
  AufrufErgebnis: Integer;
begin
  // DLL Aufruf, Krams erledigen, ein Bier trinken oder was auch immer
  SendMessage(ParentHandle, WM_MEINENACHRICHT, AufrufErgebnis, 0);
end;
Diesen Thread kannst du einfach erstellen und er arbeitet dann das Execute ab. Das ist auch das, was "im Thread" läuft. Sonst nichts. Am Ende schickt der Thread eine Nachricht an deine Form (das Handle hast du in ParentHandle dem Thread mitgegeben im Konstruktor).
Die Prozedur in deiner Form sieht dann ungefähr so aus:

Delphi-Quellcode:
procedure ThreadMessage(var Msg: TMessage); message WM_MEINENACHRICHT;
Das Ergebnis des Threads steht dann in Msg.WParam (oder so ähnlich).

Hoffe, das schafft (ein bisschen) Klarheit :) ?

Todd 25. Okt 2007 19:07

Re: Einfrieren des Programms verhindern
 
Vielen lieben Dank.

Das hilft mir sicherlich weiter.
Ich werde mich morgen mal damit beschäftigen uns sehn ob ich es alleine zum laufen bekomme.

Liebe Grüße
Todd


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.
Seite 2 von 2     12   

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