2015-01-20 2 views
1

Я совершенно не знаком с Mutex.C# Mutex Timespan объясняется новичку

Я не понимаю, что это означает:

WaitOne (TimeSpan) Блокирует текущий поток до текущего экземпляра не принимает сигнал, используя TimeSpan для указания интервала времени. (Ухожена с сайта WaitHandle.)

E.g. если я использую:

static void Main() 
{ 
    using(Mutex mutex = new Mutex(false, appGuid)) 
    { 
     if(!mutex.WaitOne(2000, false)) 
     { 
     MessageBox.Show("Instance already running"); 
     return; 
     } 

     GC.Collect();     
     Application.Run(new Form1()); 
    } 
} 

это означает, что когда-то линии

if(!mutex.WaitOne(2000, false)) 

увольняют, он ждет 2 секунды, прежде чем он проверяет, есть ли блокировка на резьбе ?

+0

Вы понимаете, что указанная вами цитата с документацией отличается от кода, который вы написали? – Rawling

+0

Для целей этого вопроса булева перегрузка не имеет никакого значения. –

+0

Параметр времени используется для определения * таймаута *, который является максимально допустимым для ожидания времени. 'WaitOne' попытается получить право собственности до истечения таймаута, начиная с« сразу после вызова »^^ – Sinatr

ответ

3

Это означает, что текущий поток будет блокироваться либо до тех пор, пока кто-то не назовет mutex.ReleaseMutex() или не пропустит перерыв 2000 мс. Если тайм-аут достигнут, операция возвращает false.

Подробнее о вызове метода можно получить по ссылке this MSDN.

Итак, в нижней строке это не имеет значения, какое значение вы передаете в качестве таймаута, вызов mutex.ReleaseMutex() будет немедленно освобождать поток в любом случае - тайм-аут там, так что вызов не будет бесконечно ждать, если мьютекс никогда не освобождаются или не освобождаются в течение периода, считающегося с опозданием по условиям приложения.

+0

, так что в течение 2000 мс, которые проходят, он пытается, например. x сумма, если время, чтобы узнать, выпущен ли мьютекс? –

+0

Да, что-то похожее на это, но это сильно зависит от ОС. К сожалению, я недостаточно осведомлен, чтобы рассказать вам о том, как реализованы мьютексы Windows (мьютексы .Net - это просто обертки для мьютексов Windows), возможно, кому-то, более увлеченному ядром Windows, может помочь. –

Смежные вопросы