AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Thread in DLL warten

Ein Thema von WorstNightmare · begonnen am 21. Feb 2010 · letzter Beitrag vom 21. Feb 2010
Antwort Antwort
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Auf Thread in DLL warten

  Alt 21. Feb 2010, 17:46
Hallo,

ich habe eine Bibliothek geschrieben, die ich jetzt in einigen Projekten benutzen werde. Das Problem ist nur, dass die Hauptfunktion sehr rechenintensiv ist und daher das GUI des Hauptprogrammes hängt. Deswegen dachte ich mir, packe ich das ganze in einen Thread, allerdings hat die Funktion ein Ergebnis und daher muss ich irgendwie auf den Thread warten, und zwar so, dass dabei nicht wieder das GUI freezed. Die Methode darf auch nicht Application.ProcessMessages verwenden, da ich dann Forms einbinden müsste und die DLL noch aufgeblähter werden würde.

Hat jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 17:49
Wie kommt man auf "Application.ProcessMessages" im Zusammenhang mit Threads?

Das geht schon mal gar nicht ... also keine Angst

Die DLL muss dem Haupt-Programm zurückmelden können, dass es jetzt fertig ist.
Suche mal nach CallBack und DLL
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 17:53
Zitat:
Die DLL muss dem Haupt-Programm zurückmelden können, dass es jetzt fertig ist.
Suche mal nach CallBack und DLL
Auch sowas wollte ich vermeiden, wenn es irgendwie anders geht
Es muss doch eine Möglichkeit geben, Performanceschonend zu warten oder?!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 17:55
Ich würde ebenfalls eine Callback-Funktion verwenden. Also das der Thread nach dem er fertig ist eine Funktion/Procedure aufruft (die vom aufrufenden festgelegt wird) und der Funktion/Procedure das Ergebnis übergibt.
Aus welchem Grund willst du die Callback-Variante vermeiden? Wenn wir die Gründe nicht kennen wissen wir auch nicht welche Alternative für dich angebracht ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 18:00
Zitat von WorstNightmare:
Es muss doch eine Möglichkeit geben, Performanceschonend zu warten oder?!
Ja -> Event-gesteuert -> Callback
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 18:05
Zitat von WorstNightmare:
Zitat:
Die DLL muss dem Haupt-Programm zurückmelden können, dass es jetzt fertig ist.
Suche mal nach CallBack und DLL
Auch sowas wollte ich vermeiden, wenn es irgendwie anders geht
Es muss doch eine Möglichkeit geben, Performanceschonend zu warten oder?!
Verstehe ich es richtig: die Funktion soll in einer DLL ausgelagert sein, da sie von vielen Anwendungen verwendet wird?

Für die Kommunikation mit der DLL gibt es neben dem Callback auch die Verwendung eines Threads in der Hauptanwendung. Denn da die Funktion einige Zeit benötigt, darf sie nicht in deren GUI-Hauptthread ausgeführt werden.

In einem eigenen Thread dagegen geht es problemlos:

Delphi-Quellcode:
...
  Result := ExecDllFunction(Params); // blockiert (den Thread) bis das Ergebnis vorliegt
  Synchronize(ShowResult)
...
Die Funktion in der DLL braucht dann auch keinen Thread zu verwenden.
Michael Justin
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#7

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 18:08
Na gut, dann muss ich es eben etwas umstrukturieren.

Eigentlich wollte ich sowas (der Bequemlichkeit wegen ):

Code:
  T := TWorkThread.Create(False);
  Wait(T);
  Result := ...
@mjustin:
Dann müsste ich in jeder Anwendung diesen Thread deklarieren, deswegen wollte ich ihn gerne in der DLL haben.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Auf Thread in DLL warten

  Alt 21. Feb 2010, 18:23
Mit dem Wait gefriert doch aber auch die Anwendung. Wozu braucht man dann noch einen Thread?!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 11:41 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