Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads (Beschreibung zu lang, siehe Text) ;) (https://www.delphipraxis.net/60494-threads-beschreibung-zu-lang-siehe-text-%3B.html)

tomaten 7. Jan 2006 17:19


Threads (Beschreibung zu lang, siehe Text) ;)
 
Hallo, ich habe eine Klasse, die im Hauptthread der Anwendung erzeugt wird. Eine Funktion der Instanze dieser Klasse wird aus anderen Threads aufgerufen. Diese wiederum soll eine private Funktion der Klasse im Hauptthread aufrufen. Es ist wichtig, dass aus dem Aufruf aus dem anderen Thread wieder ein Aufruf im Hauptthread erfolgt. Ich habe das z.Zt. mit Windows Nachrichten gelöst. Läuft auch einwandfrei. Nun wollte ich fragen, ob es eine Möglichkeit der Lösung ohne SendMessage gibt? Ich finde das irgendwie "unelegant".

jenbru 7. Jan 2006 17:50

Re: Threads (Beschreibung zu lang, siehe Text) ;)
 
Hallo,

warum ist es wichtig den Aufruf der privaten Methode an den Hauptthread zu deligieren? Zu
Synchronisationszwecken? Wenn ja, und wenn die private Methode deiner Klasse keine Aufrufparameter besitzt, könntest Du sie in einen Aufruf der statischen Synchronize-Methode der TThread-Klasse verpacken. In etwa so:


Delphi-Quellcode:
type
 TMyClass = class(TObject)
 private
   procedure PrivateMethod;
 public
   procedure PublicMethod;
 end;

...
procedure TMyClass.PublicMethod;
begin
 //Private Methode synchronisiert aufrufen
 TThread.Synchronize(nil, PrivateMethod);
end;

Das ist allerdings nicht ganz ungefährlich. Wenn die öffentliche Methode der Klasse nicht aus
einem Thread aufgerufen wird, kann es passieren, dass der Synchronize-Aufruf den Hauptthread lahmlegt.

Gruß,
Jens

SirThornberry 7. Jan 2006 17:51

Re: Threads (Beschreibung zu lang, siehe Text) ;)
 
es gibt noch syncronize was aber so ziemlich aufs gleiche hinausläuft. bzw. warum sendest du messages? In manchen fällen reicht es auch einfach schon mit critical-sections zu arbeiten.

tomaten 7. Jan 2006 18:28

Re: Threads (Beschreibung zu lang, siehe Text) ;)
 
Zitat:

Zitat von SirThornberry
es gibt noch syncronize was aber so ziemlich aufs gleiche hinausläuft. bzw. warum sendest du messages? In manchen fällen reicht es auch einfach schon mit critical-sections zu arbeiten.

Nein es geht nicht darum das Ganze threadsicher zu machen, sondern es muss im HauptThread laufen. Hat was mit dem Aufruf von ASP.NET aus Win32 zu tun (mein eigener HTTP-Server, muss auch Win32 bleiben, vorerst).

@jenbru

Es ist sicher, dass es in einem Thread aufgerufen wird. Allerdings dürfte Synchronize da langsamer sein, arbeitet ja auch nicht viel anders.

Zitat:

Da die Methode Synchronize die Botschaftsschleife verwendet ...
Dann muss es wohl so gehen.


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