Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Threads: Kann man im Thread alles andere pausieren? (https://www.delphipraxis.net/31647-threads-kann-man-im-thread-alles-andere-pausieren.html)

Koma-Code 12. Okt 2004 09:58


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?

fiasko 12. Okt 2004 10:02

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).

Koma-Code 12. Okt 2004 10:07

Re: Threads: Kann man im Thread alles andere pausieren?
 
Werd ich gleich probieren, danke :)

Luckie 12. Okt 2004 13:03

Re: Threads: Kann man im Thread alles andere pausieren?
 
Oder kuckst du hier: http://tutorials.luckie-online.de

Koma-Code 12. Okt 2004 13:40

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?

fiasko 12. Okt 2004 13:51

Re: Threads: Kann man im Thread alles andere pausieren?
 
Nein, dann hast du ein DeadLock :-)

Wenn du das aber der Art:

Delphi-Quellcode:
EntryCriticalSection(..);
try
  // Code
finally
  LeaveCriticalSection(..);
end;
machst, kann ja nix passieren wenn der Code etwas böses macht, da der finally abschnitt immer abgearbeitet wird.


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