Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Thread: Direkt auf die Form zugreifen? (https://www.delphipraxis.net/42993-thread-direkt-auf-die-form-zugreifen.html)

Michael_Bayer 29. Mär 2005 22:24

Re: Thread: Direkt auf die Form zugreifen?
 
Sind Pointer eigentlich "Treadsafe"?
Wenn ich zb einen Eintrag in einem VirtualStringTree ändern möchte.
Ich hole mit das Node in der CriticalSection und setze einen Pointer auf seine Daten.

Kann ich jetzt ausserhalb der CriticalSection mit Hilfe des Pointers die Daten verändern? (Wenn kein anderer genau auf das Ziel des Pointers schreiben möchte)

EDIT: Um mal auf die VCL zurückzukommen - sind Functionen wie "VCL-Objekt.Refresh" oder ähnliches threadsafe?

Mephistopheles 30. Mär 2005 07:40

Re: Thread: Direkt auf die Form zugreifen?
 
Zitat:

Zitat von Michael_Bayer
Sind Pointer eigentlich "Treadsafe"?
Wenn ich zb einen Eintrag in einem VirtualStringTree ändern möchte.
Ich hole mit das Node in der CriticalSection und setze einen Pointer auf seine Daten.

Kann ich jetzt ausserhalb der CriticalSection mit Hilfe des Pointers die Daten verändern? (Wenn kein anderer genau auf das Ziel des Pointers schreiben möchte)

Benutz' einfach InterlockedExchange() oder InterlockedExchangePointer() (eins von beiden war nicht deklariert in meiner Delphiversion) statt "bla := bla2" und schon bist du fein raus ;)

Zitat:

Zitat von Michael_Bayer
EDIT: Um mal auf die VCL zurückzukommen - sind Functionen wie "VCL-Objekt.Refresh" oder ähnliches threadsafe?

Die VCL ist meines Wissens vollständig nicht thread-safe.

Michael_Bayer 30. Mär 2005 08:15

Re: Thread: Direkt auf die Form zugreifen?
 
Zitat:

Zitat von Mephistopheles
Zitat:

Zitat von Michael_Bayer
Sind Pointer eigentlich "Treadsafe"?
Wenn ich zb einen Eintrag in einem VirtualStringTree ändern möchte.
Ich hole mit das Node in der CriticalSection und setze einen Pointer auf seine Daten.

Kann ich jetzt ausserhalb der CriticalSection mit Hilfe des Pointers die Daten verändern? (Wenn kein anderer genau auf das Ziel des Pointers schreiben möchte)

Benutz' einfach InterlockedExchange() oder InterlockedExchangePointer() (eins von beiden war nicht deklariert in meiner Delphiversion) statt "bla := bla2" und schon bist du fein raus ;)

Kann ich hier nicht auch eine CriticalSection benutzen? Falls ja, warum exisitieren dann so viele andere Arten von "Threadsicherung"? Was gibt mit InterlockedExchange, was mir eine Critical Section nicht gibt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz