![]() |
Threads: Kann man im Thread alles andere pausieren?
Hallo,
ich würde gerne mit einem Thread Daten speichern. Dafür müßte ich aber für die Speicher-Zeit der einzige Prozess sein, der auf den Datensatz zugreift. Geht es, das man in der Zeit den Hauptthread pausiert? |
Re: Threads: Kann man im Thread alles andere pausieren?
Hallo,
wenn du mit mehreren Threads auf eine Ressource zugreifst mußt du die ja so oder so durch das Prinzip des gegenseitigen Ausschlusses schützen. Das einfachste ist mit CriticalSection. Wenn du etwas mit der Ressource machst rufst du ein EnterCriticalSection auf, so bald als möglich die Ressource frei ist ein LeaveCriticalSection. Solange ein Thread in einer solchen CriticalSection drinne ist kommt kein anderer rein (und wird solange suspended bis der der drinne ist rausgeht). |
Re: Threads: Kann man im Thread alles andere pausieren?
Werd ich gleich probieren, danke :)
|
Re: Threads: Kann man im Thread alles andere pausieren?
Oder kuckst du hier:
![]() |
Re: Threads: Kann man im Thread alles andere pausieren?
Hab ich schon :)
Eine andere Frage aber, was passiert wenn man EnterCriticalSection aufruft, dann aber ein Fehler auftritt, so dass es nicht mehr freigegeben wird. Werden die Ressourcen automatisch nach Procedure-Ende freigegeben? |
Re: Threads: Kann man im Thread alles andere pausieren?
Nein, dann hast du ein DeadLock :-)
Wenn du das aber der Art:
Delphi-Quellcode:
machst, kann ja nix passieren wenn der Code etwas böses macht, da der finally abschnitt immer abgearbeitet wird.
EntryCriticalSection(..);
try // Code finally LeaveCriticalSection(..); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr. |
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