2013-03-19 4 views
0

anI использовал C++ framework, где выход в конце каждого цикла цикла был обязательным. Теперь, когда я начинаю с C# и C++/CLI, я также сталкивался с функцией yield. Я создаю цикл событий и задаюсь вопросом, нужно ли использовать урожай. Я не создаю игру, где важна частота кадров, я собираюсь достичь максимальной производительности (скорости).Почему выход в цикл событий?

function main 
{ 
    initialize 
    loop(!quit){ 
     update input 
     update application 
     render 
     yield 
    } 
    terminate 
} 

Не является платформой, способной правильно распределять время работы между различными приложениями, и я должен использовать выход из-за этого?

Если да, то как долго я должен это делать и не лучше ли использовать спящий поток, так что потоки с более низким приоритетом также получат дополнительное время?

Ответы на другие языки .NET также приветствуются. Мне просто интересно, нужна ли вообще цель урожая.

Благодаря

+0

Я смущен, что дает вам ссылку на: thread yield или iterator block? Или это еще что-то еще? – oleksii

+0

Вы использовали тег «yield», что означает, что «yield - это ключевое слово Python, которое облегчает создание функций генератора». Это ключевое слово также существует на языках .NET, таких как C#. Я предполагаю, что вы говорите о том, чтобы получить поток? Пожалуйста, уточните :) –

+0

@oleksii, @Benjamin Gruenbaum: Я не говорил о ключевом слове 'yield', а об общем процессе (потоке) урока. – JMRC

ответ

1

Насколько я понимаю выход использовать здесь такой же, как сон (0.00 ... 01) будет. Он сообщает планировщику, что вам не нужно делать больше работы в данный момент.

Платформа способна делить время, но она не может знать (без вашего ведома), когда лучше всего прервать поток.

Таким образом, без выполнения процесса/потока планировщик может заставить ваш поток пройти через 29 циклов, что является избыточным, поскольку новый вход не может быть. И тогда вы не получите очередной раунд в течение целой секунды. Лучше уступать, а не делать избыточную работу, поэтому вы можете вернуться к работе намного раньше, когда это будет иметь значение.

Другая причина заключается в том, что планировщик имеет хорошие шансы приостановить цикл, когда вы находитесь посередине, что означает, что рендер будет опоздать. Уступка в конце означает, что, если планировщик намеревается больше времени для вашего потока/процесса, чем то, что занимает один цикл, в среднем, вы менее склонны к тому, чтобы поток/процесс приостанавливался в середине цикла.

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