AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem: Indy-Thread und Pointer
Thema durchsuchen
Ansicht
Themen-Optionen

Problem: Indy-Thread und Pointer

Ein Thema von J_e_n_s · begonnen am 14. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
J_e_n_s

Registriert seit: 14. Jul 2009
2 Beiträge
 
Delphi 7 Professional
 
#1

Problem: Indy-Thread und Pointer

  Alt 14. Jul 2009, 18:03
Hallo,

ich habe folgendes Problem, gleich Vorweg, mit Threadprogrammierung kenne ich mich nicht so gut aus, vielleicht kann mir jemand weiterhelfen.

In meinem Delphi7-Programm verwende ich eine DLL für Bildverarbeitung, welche über ein Handle gestartet wird und auch wieder beendet wird.

Es gibt nun 2 Buttons auf der Programmoberfläche mit denen man die Bildverarbeitung startet bzw beendet --> funktioniert einwandfrei

starten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  hwnd := Pointer(Form1.Handle);
  withandle := witDLLInit4(hwnd, 0, nil, nil, 0, nil);
end;
beenden:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
   WitDllExit(withandle);
end;
Desweiteren soll dies auch über TCP/IP-Befehle möglich sein, hierfür verwende ich die Indy-komponenten:

Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
    Command : String;
    temp: String;
begin
  Command := AThread.Connection.ReadLn;
  Command := uppercase(Command);
  if (Command = 'LOADDLL') then      [b]//starten[/b]
  begin
         hwnd := Pointer(Form1.Handle);
         withandle := witDLLInit4(hwnd, 0, nil, nil, 0, nil);
         temp:='DLL_LOADED' + chr(10);   
   AThread.Connection.Write(temp);
  end
  else if (Command = 'UNLOADDLL') then      [b]//beenden[/b]
  begin
   WitDllExit(withandle);
   temp:='DLL_UNLOADED' + chr(10);
   AThread.Connection.Write(temp);
  end
  else
  begin
    temp:='NOK:UNKNOWN_COMMAND' + chr(10);
    AThread.Connection.Write(temp);
  end;
end;
--> Auch das funktioniert für sich einwandfrei

D.h. Starten über Button, beenden über Button geht
Starten über TCP/IP, beenden über TCP/IP geht

Jetzt das Problem: Starte ich die DLL über den Button und will Sie über TCP/IP beenden hängt sich das Programm auf, genauso anders herum....

Bin mir ziemlich sicher dass die Pointer nur in ihrem eigenen Thread gültig sind und es deshalb Probleme gibt, finde aber keine verlässliche einfache Lösung dies zu umgehen.

Vielen Dank für Eure Hilfe,
Jens
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

Re: Problem: Indy-Thread und Pointer

  Alt 14. Jul 2009, 18:38
vielleicht funktioniert dies (quick & dirty):

Delphi-Quellcode:
  TForm1
  ....
  private
    withandle: TwitHandle;
    procedure DoCloseWit;
    procedure DoStartWit;
  ...


procedure TForm1.DoCloseWit;
begin
  WitDllExit(withandle);
end;

procedure TForm1.DoStartWit;
begin
  withandle := witDLLInit4(Pointer(Handle), 0, nil, nil, 0, nil);
end;

...

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
    Command : String;
    temp: String;
begin
  Command := AThread.Connection.ReadLn;
  Command := uppercase(Command);
  if (Command = 'LOADDLL') then [b]//starten[/b]
  begin
    AThread.Synchronize(DoStartWit);
    temp:='DLL_LOADED' + chr(10);
   AThread.Connection.Write(temp);
  end
  else if (Command = 'UNLOADDLL') then [b]//beenden[/b]
  begin
   AThread.Synchronize(DoStopWit);
   temp:='DLL_UNLOADED' + chr(10);
   AThread.Connection.Write(temp);
  end
  else
  begin
    temp:='NOK:UNKNOWN_COMMAND' + chr(10);
    AThread.Connection.Write(temp);
  end;
end;
Was ist, wenn mehrere Clients auf den Server zugreifen?
  Mit Zitat antworten Zitat
J_e_n_s

Registriert seit: 14. Jul 2009
2 Beiträge
 
Delphi 7 Professional
 
#3

Re: Problem: Indy-Thread und Pointer

  Alt 14. Jul 2009, 19:11
Hallo Samso,

Es funktioniert!!!!

Danke, Du hast meinen Abend gerettet, vielen Dank!!

viele Grüße,
Jens
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:24 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