Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Thread für einen Funktionsaufruf erstellen

  Alt 20. Sep 2012, 09:01
Die im Code aufgerufene Funktion ImageSearch() kommt aus der "ImageSearchDLL.dll", die im Anhang ist.
function ImageSearch(aLeft: Integer; aTop: Integer; aRight: Integer; aBottom: Integer; aImageFile: PChar): PChar; stdcall; external 'ImageSearchDLL.dll'; Daher denke ich, dass TCanvas hier kein Problem sein dürfte. Die Mausbewegung könnte ja auch außerhalb des Thread ausgeführt werden, sobald der Thread durch gelaufen ist.
Also:

* die DLL Funktion (die natürlich multithreading sicher ist ) soll mehrfach aufgerufen werden, jeweils für eine andere Datei / mit anderen Parametern) -> kein Problem

* die GUI soll nach Beenden des Threads etwas tun

Damit die GUI-Aktivität nichts durcheinanderbringt, kann im Thread synchronize verwendet werden. Der Thread führt den synchronized-Code dann im Kontext des Hauptthreads aus (die anderen Threads laufen weiter, es sei denn sie erreichen ebenfalls den synchronized-Punkt)

Pseudo-Code:

Delphi-Quellcode:
procedure MyThread.Execute
begin
  - rufe die DLL Funktion auf
  - speichere das Ergebnis in einer property des Thread-Objekts
  MyResult := ImageSearch(0,0,Screen.Width ,Screen.Height ,PCHAR(findImage));
  - rufe synchronized eine Thread-Methode auf, die dann eine Methode des Hauptthreads aufruft
  synchronize(MyResultMethod);
end;

procedure MyThread.MyResultMethod;
begin
  // wird im MAIN Thread ausgeführt
  MainForm.ShowResult(MyResult);
end;
in ShowResult kann dann der in deinem Beispiel enthaltene Code verwendet werden. Die Threads werden ihn nicht gleichzeitig ausführen, sondern in Reihenfolge ihrer Fertigestellung.
Michael Justin
  Mit Zitat antworten Zitat