Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TCriticalSection und Timeout (https://www.delphipraxis.net/46525-tcriticalsection-und-timeout.html)

SubData 26. Mai 2005 14:13


TCriticalSection und Timeout
 
Morjn...

Hat jemand ne Idee wie man einer CriticalSection einen Timeout zuweisen kann?
Das Programm soll x Sekunden auf eine kritische Sektion warten und falls die Zeitspanne überschritten wird, soll der Code der in der kritischen Sektion steht nicht ausgeführt werden.

Ich möchte dafür nicht unbedingt einen Timer verwenden...

Basilikum 26. Mai 2005 17:31

Re: TCriticalSection und Timeout
 
ein Timeout ist meines Wissens mit CriticalSections nicht realisierbar... ausser Du pollst mittels TryEnter eine gewisse Zeit lang, bis die Section entweder frei wird, oder die Zeit abgelaufen ist (nicht gerade eine schöne Lösung; viele Context-Switches für nichts und wieder nichts)...
besser wäre es, dazu ein Mutex zu verwenden... beim "Betreten" des Mutex mit WaitForSingleObject kannst Du auch ein Timeout definieren....

MSDN-Library durchsuchenCreateMutex
MSDN-Library durchsuchenWaitForSingleObject

SubData 27. Mai 2005 08:52

Re: TCriticalSection und Timeout
 
Klingt gut, das werd ich mir mal ansehen...

TryEnter gibs bei D7 EP übrigens nicht :/

Basilikum 27. Mai 2005 11:25

Re: TCriticalSection und Timeout
 
Zitat:

Zitat von SubData
Klingt gut, das werd ich mir mal ansehen...

TryEnter gibs bei D7 EP übrigens nicht :/

oha... diese Methode gibts demfalls erst ab D2k5...

MSDN-Library durchsuchenTryEnterCriticalSection wäre die entsprechende API Function

MosiXXL 27. Mai 2005 20:09

Re: TCriticalSection und Timeout
 
So gehts mit TEvent (syncobjs)

Delphi-Quellcode:
  case lvEvent.WaitFor(1000) of
    //Das Signal für das Ereignisobjekt wurde gesetzt.
    wrSignaled :;
    //Die im Parameter TimeOut angegebene Zeitspanne ist verstrichen, ohne dass das Signal gesetzt wurde.
    wrTimeOut   :;
    //Das Ereignisobjekt wurde gelöscht, bevor das TimeOut-Intervall verstrichen ist.
    wrAbandoned   :;
    //im Warten ist ein Fehler aufgetreten. Überprüfen Sie die Eigenschaft LastError. Der Fehlercode in LastError enthält nähere Informationen.
    wrError   :;
    end;

SubData 30. Mai 2005 05:07

Re: TCriticalSection und Timeout
 
Ui das is genau das was ich brauche... Super, danke :>


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