Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi [Problem] DLL + Threads (https://www.delphipraxis.net/168341-%5Bproblem%5D-dll-threads.html)

1Molotow1 16. Mai 2012 11:34

[Problem] DLL + Threads
 
Hallo, erst mal sorry falls das hier nicht die richtige Sektion ist. Ich habe keine passende gefunden...

Also:
Ich möchte in einer DLL einen Thread(oder mehrere) starten, mit einer Endlosschleife. (while)
Die EXE die die DLL ladet, hat ebenfalls eine Endlosschleife, die nach dem Start der Threads einfach "stehen bleibt". Das soll sie aber nicht!

EXE Code:
Code:
program bin;

uses
  SysUtils, Windows;

type
  TRealFunction = function(sParam: PChar): PChar; stdcall;

function LoadDLL(DllName: PChar; Einstieg: PChar; sParam: PChar): string;
var
  RealFunction: TRealFunction;
  Handle: THandle;
begin
  Handle := LoadLibrary(DllName);
  if Handle <> 0 then begin
    @RealFunction := GetProcAddress(Handle, Einstieg);
    if @RealFunction <> nil then begin
      result := PChar(RealFunction(sParam));
    end;
    FreeLibrary(Handle);
  end;
end;

Var
  sString: String;
begin

// sString wird eig. ausgelesen
sString := 'lal';

  while True do
  begin
    sleep(5000);

    if sString = 'lal' then
      LoadDLL(PAnsiChar(GetCurrentDir + '\test.dll'),'StartPlugin',PAnsiChar('übergabe-string'));

    // hier immer wieder ein command wiederholen
    // allerdings passiert nichts mehr, nachdem die dll geladen wird
  end;

end.
DLL Code:
Code:
library test;

uses
  SysUtils,
  Windows,
  Dialogs;

{$R *.res}

function tThread(p: Pointer): Integer;
begin

while True do
begin
  MessageBox(0, 'Endlosschleife soll bleiben...', '', 0);
end;

end;

function StartPlugin(sParam: PChar): PChar; stdcall;
Var
  Id:DWORD;
begin
  waitforsingleobject(BeginThread(nil,0,@tThread,nil,0,id),infinite);
end;

exports
  StartPlugin;

Begin
  IsMultiThread := True;

end.
Hat jemand eine Idee wie ich es hinbekomme, dass beide Endlosschleifen weiter laufen?


Danke im Vorraus!

jaenicke 16. Mai 2012 11:45

AW: [Problem] DLL + Threads
 
Was soll denn das WaitForSingleObject auf den Rückgabewert von BeginThread bewirken?

Ich weiß nicht genau was WaitForSingleObject mit einem Threadhandle macht, aber ich vermute es wartet auf die Beendigung des Threads. Und genau das willst du doch gar nicht.

Starte doch einfach den Thread und fertig...

1Molotow1 16. Mai 2012 11:48

AW: [Problem] DLL + Threads
 
Zitat:

Zitat von jaenicke (Beitrag 1166777)
Was soll denn das WaitForSingleObject auf den Rückgabewert von BeginThread bewirken?

Ich weiß nicht genau was WaitForSingleObject mit einem Threadhandle macht, aber ich vermute es wartet auf die Beendigung des Threads. Und genau das willst du doch gar nicht.

Genau, er wartet bis der Thread fertig ist.

Zitat:

Zitat von jaenicke (Beitrag 1166777)
Starte doch einfach den Thread und fertig...

Dann habe ich das Problem, dass mir die EXE abstürzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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