Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi *.dll Anfrage / Lange Funktionen abbrechen (https://www.delphipraxis.net/43729-%2A-dll-anfrage-lange-funktionen-abbrechen.html)

DerBadejunge 7. Apr 2005 20:41


*.dll Anfrage / Lange Funktionen abbrechen
 
Hallo ihr lieben Delphine,
ich komme eigentlich aus dem C++ Crosscompiling
doch muss ich nun für die Schule auf Delphi zurückgreifen.

Die Funktion sei:

function fkt1(S: PChar): Longbool; stdcall; external 'libxyz.dll' index 1;

Soweit so gut,
doch wenn ich eine Rechenopperation habe, die 10 Minuten auf den Rückgabewert warten...
Was dann?
Windoof denkt, dass alles tot ist und "Reagiert nicht" ...

Wie kann ich das GUI redrawen und ggf. einen Button haben, der mir den Call killt?

Bisher habe ich hier solche hilfe nur für Schleifen gesehen...

gruß
Wilhelm "DerBadejunge" K.

Luckie 7. Apr 2005 20:51

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Du könntest den Aufruf in einen Thread packen. Allerdings, wenn die Funktion i der DLL dir keine Abbruchmöglichkeit durch eine Callback Funktion gibt, dann dürfte es schwer fallen den Funktionsaufruf sauber abzubrechen.

DerBadejunge 7. Apr 2005 20:54

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Danke,
Thread scheint ein nettes Stichwort.

Was hällst du davon ein Kernelsignal Kill,Stop,..., zu senden?

P.S. obwohl das Saubere abbrechen in diesem Fall egal ist. Oder pennt windows da?
was wäre ein Beispiel code oder eine Quelle des Wissens?!

gruß := Danke
Wilhelm

mirage228 7. Apr 2005 20:56

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Zitat:

Zitat von DerBadejunge
Danke,
Thread scheint ein nettes Stichwort.

Was hällst du davon ein Kernelsignal Kill,Stop,..., zu senden?

P.S. obwohl das Saubere abbrechen in diesem Fall egal ist. Oder pennt windows da?
was wäre ein Beispiel code oder eine Quelle des Wissens?!

gruß := Danke
Wilhelm

Hi,

Du terminierst den Thread, in dem deine Berechnung läuft, einfach mit der Methode MSDN-Library durchsuchenTerminateThread.

mfG
mirage228

Luckie 7. Apr 2005 20:58

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Zitat:

Zitat von mirage228
Du terminierst den Thread, in dem deine Berechnung läuft, einfach mit der Methode MSDN-Library durchsuchenTerminateThread.

Ich sagte "sauber". :roll:

Zitat:

Zitat von PSDK
TerminateThread is used to cause a thread to exit. When this occurs, the target thread has no chance to execute any user-mode code and its initial stack is not deallocated. DLLs attached to the thread are not notified that the thread is terminating.

TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination.


mirage228 7. Apr 2005 21:04

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Kennst Du eine saubere Methode um eine Funktion abbrechen, von dem Du den Code nicht hast und auch sonst keine Möglichkeit besteht ihn irgendwie abbzubrechen?
Da ist TerminateThread die einzige Möglichkeit. Ist zwar die "Holzhammer-Methode", aber anders gehts manchmal nicht...

mfG
mirage228

DerBadejunge 7. Apr 2005 21:07

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
;o) Dank an euch!

Ein Punkt -- Die dll ist von mir.
Alles ist möglich!

gruß
Wilhelm

P.S. wird der Speicher nicht ohnehin freigegeben, wenn die Funktion gekillt wird?

Dax 7. Apr 2005 21:10

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Die DLL ist von dir geschrieben? Sags doch gleich *g* Ich gehe mal davon aus, dass du in einer Schleife das berechnest, was deiner Aussage nach so lange dauert. Lager doch deine Funktion in einen Thread und checke alle X Sekunden, ob ein Bool-Wert durch eine andere Funktion gesetzt wurde und falls ja, kille die Funktion einfach mit einem Exit.

DerBadejunge 7. Apr 2005 21:14

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Super, danke.
Wie halte ich dann die GUI aufrecht?
Ich meine Buttons sperren krieg ich schon auf die Reihe.
Wie erstelle ich den Thread?
Sorry
<--- Delphi-Spasst :-)

Aber ansonten bekomme ich das schon Selbst hin!
Dankeschön!

Gruß
Wilhelm

Luckie 7. Apr 2005 21:17

Re: *.dll Anfrage / Lange Funktionen abbrechen
 
Threading Tutorial gibt es auf meiner Seite.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz