WaitHandle.WaitAny passend WaitForMultipleObjects-Funktionalität
Ich bin Portierung C++ API
code .NET
und suchen in-Funktion aufrufen WaitHandle.WaitAny
als Ersatz für WaitForMultipleObjects
aber beim Debuggen mit .NET4
ich kann sehen, dass diese Funktion angeschlossen wird, in
private static extern int WaitMultiple(
WaitHandle[] waitableSafeHandle,
int msTimeOut,
bool exitContext,
bool WaitAll);
und das macht mich denken, dass diese Funktion nicht sutable für den port. Irgendwelche anderen Vorschläge?
- Warum nicht? Es ermöglicht die Angabe mehrerer wait-handles sowie
- Warum denkst du, dass WaitAny nicht geeignet ist?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist wahr, dass
WaitHandle.WaitAny()
ist nicht ganz genug, um die übereinstimmung der Funktionalität vonWaitForMultipleObjects()
. Aber Sie brauchen nur zu verwendenWaitHandle.WaitAll()
als gut.WaitHandle.WaitAny()
entsprichtWaitForMultipleObjects()
mit derWaitAll
parameterFALSE
,.WaitHandle.WaitAll()
passt es mitWaitAll
eingestelltTRUE
.Ziemlich die gleiche Signatur und Verhalten, so ist es ein guter Kandidat. Wenn
WaitForMultipleObjects()
genannt wurde mitWaitAll=true
könnten SieWaitHandle.WaitAll()
sowieC++ - Funktion WaitForMultipleObjects()
C# WaitHandle.WaitAny()
.NET
bietet eine andere Methode WaitHandle.WaitAll() aber es nützlich, wenn Sie benötigen, um sicherzustellen, dass ALLE Griffe sind empfangen ein signal.Es ist gut, es verwendet WaitForMultipleObjects() unter der Haube. Finden Sie heraus, mit diesem kleinen test-Programm:
Gleichen Einschränkung, dass WaitForMultipleObjects hat. Die WaitMultiple () - Methode ist gekennzeichnet MethodImplOptions.InternalCall, weil es lebt ja in der CLR. Die wissen will über die Sperrung wartet, um mehrere verwaltete threading garantiert. Wie pumpt eine message-loop auf einen UI-thread, damit die COM-happy (MsgWaitForMultipleObjects), zu wissen, Wann ein remoting-Antrag aufgehoben werden kann für den nächsten request und wissen, Wann ein thread in einem sicheren Zustand zu Ehren abort-Anforderungen.