Stealth Client Forum

Альтернативный клиент Ultima Online
Текущее время: 19.01.2019 9:54

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 28.08.2018 7:11 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3782
Итак, как устроен механизм ивентов.

Вызов ивентов происходит при вызове Wait в скрипте, необязательно напрямую, но и внутри других методов, типа ходилки или ожидания в WaitJournalLine и прочих.

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


Из этого вытекает, что в процедурах - обработчиках ивентов НЕЛЬЗЯ ставить долгие (или вечные) циклы, долгие по времени действия и все такое. Да и вообще, чем быстрее выполнится обработчик ивента - тем быстрее придет очередь на выполнение следующего. Особенно это актуально для evTimer, которые добавляются в очередь каждые 100 мс, и если обработчик будет выполняться дольше, чем эти 100мс - то события будут скапливаться в очереди и довольно быстро переполнят стек и обрушат скрипт. А винить будут опять стелс, в котором-де ни с того ни с сего умирают скрипты.


вот свежайший пример категорического непонимания работы системы ивентов:

Цитата:
решил проверить паралельность и блокирование - делаю в обработчике OnSpeech:

while true do begin
AddToSystemJournal(Text);
Wait(1000);
end;

и затем в игре в чат пишу 1 потом 2 потом 3

в System-логе в это время пишется "1" раз в секунду. о "2" и "3" ни слова

потом если нажать СТОП скрипу в систем локе появляется спам "2" судя по времени по 20 штук с одной милисекундной меткой

если второй раз нажать СТОП скрипт в систем логе появляется аналогичный спам "3" тоже каждую тысячную милисекунды п0 100 раз

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 28.08.2018 7:12 
Не в сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3782
если что-то непонятно - пишите тут, исправлю-дополню.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Тюнинг и аксессуары. Тюнинг внедорожников: магазин 4х4 в Одессе. Интернет магазин "AMAX".
Также, на правах рекламы: школьный сайт: school-work.net и еще один: https://www.youtube.com/channel/UCFSPHKHjP22tEl8Rjcst9Fw.


Рейтинг@Mail.ru
Powered by phpBB® Forum Software © phpBB Group