Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Event/Mutex Status (https://www.delphipraxis.net/144142-event-mutex-status.html)

Mavarik 1. Dez 2009 07:33


Event/Mutex Status
 
Hallo Zusammen...

Ich hänge gerade mal wieder...

SetEvent(Handle) - Klar
ResetEvent(Handle) - Klar
WaitForSingleObject(Handle,1000) - Klar...

Aber wie kann ich den Zustand abfragen?

repeat
xyz
Until Not(???(Handle));

Grüsse Mavarik :gruebel:

himitsu 1. Dez 2009 07:41

Re: Event/Mutex Status
 
Sollte bei Signaled-State die Schleife verlassen.
Delphi-Quellcode:
repeat
  ..
until WaitForSingleObject(Handle, 1) = WAIT_OBJECT_0;
Gut, bei NonSignaled macht es 'ne Millisekunde lang Pause und führt dann die Schleife fort.

Mavarik 1. Dez 2009 07:43

Re: Event/Mutex Status
 
OK
Danke...

Hätte vielleicht doch erst einen Kaffee trinken sollen... :mrgreen:


Mavarik :dp:

himitsu 1. Dez 2009 07:46

Re: Event/Mutex Status
 
'ne Funktion ohne Wartezeit ist mir auch noch nicht eingefallen
und die Idee hier eine 0 statt der 1 zu Verwenden sollte man gleich wieder ignorieren
(0 = unendlich und nicht 0 = nichts :oops: )


[add]
Es kommt auch drauf an, was du erreichen willst ... man glaubt garnicht, was man alles mit einem Byte anstellen kann :shock:

Delphi-Quellcode:
Var Status: ByteBool;

repeat

until Status;

und dann
Delphi-Quellcode:
Procedure SetEvent(Var B: ByteBool);
  ASM
    //LOCK MOV BYTE PTR [EAX], 1
    LOCK OR BYTE PTR [EAX], 1
  End;

Procedure ResetEvent(Var B: ByteBool);
  ASM
    //LOCK MOV BYTE PTR [EAX], 0
    LOCK AND BYTE PTR [EAX], 0
  End;
theoretisch sollte das Auskommentierte funktionieren, aber einige Compiler mögen es nicht
> External Exception C000001E

Bezüglich der Diskussionen über optimale Speichergrößen und Dergleichen, kann man auch gerne LongBool verwenden.

Alex_ITA01 1. Dez 2009 09:51

Re: Event/Mutex Status
 
Hallo zusammen,
seit wann bedeutet 0 = unendlich und nicht nichts?
Dafür gibts doch extra INFINITE, welches für unendlich steht.

Viele Grüße
Alex

sirius 1. Dez 2009 09:54

Re: Event/Mutex Status
 
Zitat:

Zitat von Alex_ITA01
Hallo zusammen,
seit wann bedeutet 0 = unendlich und nicht nichts?
Dafür gibts doch extra INFINITE, welches für unendlich steht.

Und genau deswegen ist 0 hier goldrichtig, sagt ja auch MS:
Zitat:

If dwMilliseconds is zero, the function does not enter a wait state if the object is not signaled; it always returns immediately.

himitsu 1. Dez 2009 09:58

Re: Event/Mutex Status
 
Komisch, mir wasr so, als hätte ich vorhin im MSDN quasi sowas gelesen, wie
wenn 0 dann gibt es kein Timeout
gelesen hätte ... beim nochmaligen Lesen kann ich nur sagen ... erst fertiglesen das INFINITE wird dann auch noch erwähnt :oops:

OK, dann ist die 0 natürlich doch gut :-D

Alex_ITA01 1. Dez 2009 10:05

Re: Event/Mutex Status
 
Gut wenn man mal drüber gesprochen hat ;-)

:xmas:


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