Verwenden der waitone () -Methode

8
%Vor%

Ссылка

In diesem Code:

%Vor%

Ссылка

Es gibt keine Umkehrung des if / bool.

Wenn waitone () wahr ist, bedeutet das, dass bereits eine Instanz läuft? Wenn true zurückgegeben wird, wird der aktuelle Thread blockiert, was bedeuten würde, dass zwei Prozesse, die dieselbe App aufrufen, beide anhalten?

Mein Verständnis ist wie folgt:

%Vor%

Was ist die Implikation von nein! (zurück wahr) und umgekehrt. Oder mit anderen Worten, was passiert auf jeden Fall?

Ich weiß zum Beispiel waitAll wartet auf das Ende aller Threads. Jon Skeet hat auf seiner Seite ein gutes Beispiel dafür gezeigt, was mir in Erinnerung geblieben ist (Anerkennung für seine Erklärungen). Offensichtlich wartet waitOne darauf, dass ein Thread beendet wird. Der Rückgabewert ist was mich verwirrt.

    
dotnetdev 02.05.2009, 15:18
quelle

2 Antworten

15

Warten auf einen Mutex bedeutet warten, bis Sie es erwerben können.

WaitOne auf einem Mutex gibt true zurück, wenn der Mutex in der gegebenen Zeit akquiriert werden konnte. Wenn dies nicht möglich ist, gibt die Methode false zurück. Wenn der Mutex erworben wurde, liegt es in Ihrer Verantwortung, den Mutex freizugeben, wenn Sie damit fertig sind.

Wenn Sie einen benannten Mutex erwerben können, besitzt ihn im Moment niemand.

Also, um es zu wiederholen. Wenn Sie den Mutex erwerben können, gibt die Methode true zurück und Sie sind die erste / einzige Instanz Ihrer Anwendung in Bezug auf Ihre Frage.

Wenn Sie den Mutex nicht erfassen können, gibt die Methode false zurück und es gibt eine andere Anwendungsinstanz, die gerade den Mutex unter diesem Namen besitzt.

    
Lasse Vågsæther Karlsen 02.05.2009, 15:50
quelle
1

In der MSDN lautet die Beschreibung von mutex.WaitOne ():

  

Blockiert den aktuellen Thread bis zum   aktuelle WaitHandle empfängt ein Signal.

Und der Rückgabewert ist: wahr, wenn die aktuelle Instanz ein Signal empfängt

Damit die Anwendung einmal gestartet wird, empfängt sie kein Signal von der Methode mute.WaitOne (). Der Thread ist blockiert, wie es in der Beschreibung heißt.

Also, um Ihre Frage zu beantworten:

  

Was ist die Implikation von nein! (zurück wahr) und umgekehrt.

Wenn Sie die mutex.WaitOne () -Methode negieren, dann werden Sie dies überprüfen: Wenn NOT waitOne (), bedeutet dies, dass Sie überprüfen, ob die waitOne nicht mit true antwortet.

Ich hoffe, das ist jetzt klarer.

    
Timotei 02.05.2009 15:41
quelle

Tags und Links