2017-08-29 5 views
-1

Man bedenke, dass ich zwei ManualEventReset instancesManualEventReset - warten Sie auf einem der beiden

public void MyApiCall(ManualResetEvent ev1, ManualResetEvent ev2) 
{ 
    //my code 
} 

Jetzt bestanden haben, muss ich ‚WaitOne‘ für jede der beiden (egal, wer von ihnen, ich brauche so schnell weiter als einer von ihnen angehobenes Signal). Es ist möglich, ohne api zu ändern?

Eine der Lösungen ist Spin-Lock:

while (!ev1.WaitOne(0) && !ev1.WaitOne(0)) 
{ 
    Thread.Sleep(500); 
} 

Aber ich frage mich, ob es eine bessere Lösung ist.

+1

Sie suchen [WaitHandle.WaitAny] (https://msdn.microsoft.com/ru-ru/library/cc189983 (v = vs.110) .aspx) –

+1

@GeorgeAlexandria ohh, das war genau das was ich gesucht habe. Vielleicht solltest du eine Antwort schreiben? :) – pwas

+0

Warum runter? Ist in meiner Frage etwas unklar? – pwas

Antwort

2

Sie suchen nach WaitHandle.WaitAny.

Beispiel:

WaitHandle.WaitAny(new WaitHandle[] { ev1, ev2 });