Изменения

Материал из Chaotic Onyx
Перейти к навигацииПерейти к поиску
3660 байт добавлено ,  10:37, 5 августа 2013
Еще четверть главы
Строка 70: Строка 70:     
Когда кто-то в первый раз заходит в комнату, триггер устанавливается и смертельный код откладывается. Операция ''enter'' продолжает информировать каждого входящего о том, сколько времени осталось. Когда наступает нужный момент, грязное дело совершается внутри отсроченного блока кода. Заметьте, что когда отложенный код выполняется, он автоматически останавливается в конце блока, как будто это совершенно другая операция.
 
Когда кто-то в первый раз заходит в комнату, триггер устанавливается и смертельный код откладывается. Операция ''enter'' продолжает информировать каждого входящего о том, сколько времени осталось. Когда наступает нужный момент, грязное дело совершается внутри отсроченного блока кода. Заметьте, что когда отложенный код выполняется, он автоматически останавливается в конце блока, как будто это совершенно другая операция.
 +
 +
== Расчет времени ==
 +
Когда интенсивно используется выполнение в реальном времени, полезно знать то, как всё это происходит изнутри. Этот раздел описывает шестеренки и пружины, благодаря которым мир тикает.
 +
 +
=== Потоки выполнения ===
 +
Мир DM - '''однопоточный'''. Это значит, что только один кусок кода может выполняться одновременно. В другом случае, вам бы пришлось заботиться о гораздо большем количестве потенциальных проблем в коде. Например, если бы отсроченный блок кода, наподобие предыдущего примера, удалял объекты из мира, могли бы возникнуть проблемы, в случае, когда эти объекты используются одновременно другим кодом. Если бы код попытался получить доступ к переменным или операциям удаленных объектов, это привело бы к завершению, возможно, оставляя некоторые важные операции незаконченными.
 +
 +
''Если хотите параллелей, собственно говоря, вы можете рассекать мир на многочисленные сервера. Если бы у вас было много CPU  в одном компьютере или множество компьютеров, вы бы создали параллельные вселенные!''
 +
 +
С тех пор, как существует только одиночный непрерывный поток выполнения, вы можете быть увереннее, когда пишете код. Между одной командой и следующей, ничего не происходит. Если объект существует в конце одной команды, то он будет существовать и в начале следующей.
 +
 +
Единственным исключением в этом правиле являются спящие операции. В этом случае, вам следует осознавать, что всё что угодно может произойти во время паузы. Например, переменная, относящаяся к объекту, может обнулиться, потому что объект был удален. Перед тем как полагаться на спящую команду, следует всё перепроверить, чтобы убедиться, что ничего не произошло.
 +
 +
Переменная ''src''  используется как раз для этого. Когда src спящей операции удаляется, сама операция отменяется. Это почти всегда дает желаемый результат и проблема точной проверки отпадает. Если вы не хотите, чтобы операция отменилась, вам всегда следует ставить переменную ''src'' на ноль перед засыпанием. Это делает операцию независимой от существования ''src'' объекта.

Навигация