Форум Pawn.Wiki - Воплоти мечту в реальность!: Аналог функции Sleep. - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Аналог функции Sleep. Оценка: -----

#1
Пользователь офлайн   FBI251 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Всем привет! Меня зовут Дима и я как бы новенький на форуме. Прочитал несколько тем, и наткнулся на следующее: "Есть ли или как использовать функцию Sleep внутри пабликов, так как через таймеры не удобно". Возможно и есть решение но я не нашел. Я использовал этот метод, чтобы ограничить количество кадров в игре. Думаю это может пригодится некоторым.

stock Sleep(millisecond)
{
new oldTime = GetTickCount();
while(GetTickCount() - oldTime >millisecond) { } 
return millisecond;
}


В качестве параметра вводите задержку в миллисекундах(1 / 1000 секунды).

А теперь о минусах:
  • Так как переменная oldTime имеет лимит в 2 миллиарда и сколько то там, то функция будет корректно работать около 49 дней, с начала запуска ОС, а не сервера. При перезагрузке счетчик обнуляется.
  • Сервер САМП однопоточный, по этому могут возникнуть задержки у игроков.


Простите за кривоту кода, не догнал как сделать отступ.

Сообщение отредактировал FBI251: 06 января 2021 - 19:21

0

#2
Пользователь офлайн   Pa4enka 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию
В каких практических ситуациях нужно использовать данную функцию в павн?
0

#3
Пользователь офлайн   Nexius 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияFBI251 (06 января 2021 - 19:19) писал:

то функция будет корректно работать около 49 дней, с начала запуска ОС, а не сервера.

На винде и линуксе GetTickCount имеет разное поведение. Так, на линуксе функция возвращает тики, как и описано в документации, именно с момента старта самп сервера, а вот на винде это действительно будет идти с момента запуска физического сервера и обнулится только после нормальной его перезагрузки (именно полноценной, т.к. при выключении/включении с какими-нибудь опциями быстрых запусков начиная с win8 не обнуляется).

Просмотр сообщенияFBI251 (06 января 2021 - 19:19) писал:

Сервер САМП однопоточный, по этому могут возникнуть задержки у игроков.

Точно возникнут, потому что на протяжении всего этого времени выполнения while, сервер будет висеть для выполнения других операций.

Сообщение отредактировал Nexius: 07 января 2021 - 02:14

0

#4
Пользователь офлайн   FBI251 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияPa4enka (07 января 2021 - 01:16) писал:

В каких практических ситуациях нужно использовать данную функцию в павн?

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

Просмотр сообщенияNexius (07 января 2021 - 02:11) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


По поводу GetTickCount (). В любом случае сервер вряд ли больше 30 дней будет безотказно работать. По любому его перезапустят. А насчет задержек не спорю.

Сообщение отредактировал FBI251: 07 января 2021 - 12:40

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика