SpinWait.SpinOnce vs Thread.Sleep
От: Аноним  
Дата: 09.07.13 13:18
Оценка: :)
В процессе рефакторинга кода возник вопрос.
Существует примерно такой код
do
{
res = FindWindow(...);

if(res == IntPtr.Zero)
Thread.Sleep(500);

}
while (res == IntPtr.Zero);



Активное ожидание это плохо, но в этом случае насколько я знаю неизбежно.

Возник вопрос.
Будет ли лучше использовать вот такой код:


SpinWait spinWait = new SpinWait();
do
{
res = FindWindow(...);

if(res == IntPtr.Zero)
SpinWait.SpinOnce();
}
while (res == IntPtr.Zero);


Во втором варианте я вижу более быстрое время отклика.
Re: SpinWait.SpinOnce vs Thread.Sleep
От: Visor2004  
Дата: 10.07.13 11:28
Оценка:
Здравствуйте, Аноним, Вы писали:
Если поставить Thread.Sleep(1); будет такое же время отклика.
Помните!!! ваш говнокод кому-то предстоит разгребать.
Re[2]: SpinWait.SpinOnce vs Thread.Sleep
От: ZloeBablo Германия  
Дата: 10.07.13 11:55
Оценка:
Здравствуйте, Visor2004, Вы писали:

V>Здравствуйте, Аноним, Вы писали:

V>Если поставить Thread.Sleep(1); будет такое же время отклика.

Но будет постоянное переключение контекста. Что в этой задаче наверное пофигу.
Мне кажется топик стартер занимается ерундой.
Re: SpinWait.SpinOnce vs Thread.Sleep
От: pavel783  
Дата: 17.07.13 05:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Во втором варианте я вижу более быстрое время отклика.


если FindWindow выполняется достаточно быстро другим потоком и есть уверенность что на другом процессоре то можно и spin использовать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.