Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Выполнение какой либо функции
Выполнение какой либо функции
serm Дата: Понедельник, 15.09.2014, 10:08:28 | Сообщение # 1
Сообщений: 137
Репутация: 7 [ +/- ]
Смотрите , есть функция например
Код


public FirstFunc(){
// Например ставлю на выполнение функцию MyFunc()
       MyFunc(client1); // И еще раз ставлю эту же функцию на выполнение
       MyFunc(client2);  
}

public MyFunc(client){
// Тут код какой нибудь
      new i_health; // Допустим тут у нас здоровье клиента
}


В чем собственно вопрос, функция MyFunc выполняется 2 раза за 1 тик игры. В функции хранится например информация от игрока 1 и игрока 2 .
Возможно ли такое, что в функции запущенной первее второй например изменится переменная i_health (с учетом того, что первая функция еще не закончила свое выполнение) ?

Повторю для простых людей :
Первая функция выполняется , следом вторая . Первая функция еще не закончила свое выполнение как вторая уже изменяет нашу переменную i_health . Итог, при завершении выполнении первой функции у нас показатель здоровья i_health имеет значение от второй функции .

Думаю будет понятен мой вопрос
 
_wS_ Дата: Понедельник, 15.09.2014, 10:43:39 | Сообщение # 2
Thanks
Думаю такого не может быть, код же по идее выполняется в порядке очереди сверху вниз, а имя функции работает как include, подставляет код из функции, и в порядке очереди он выполняется. У меня тож бывают сомнения, например есть while цикл, а ниже код (за пределами цикла), думаю успеет ли весь код выполниться в этом while цикле, или же может случиться так, что while еще работает, а код ниже уже выполнился. Проверить затестить несложно ж.
 
BarD Дата: Понедельник, 15.09.2014, 11:30:53 | Сообщение # 3
Сообщений: 943
Репутация: 137 [ +/- ]
Так у тебя же в каждой функции создается новая переменная i_health. Как она может поменяться, если работает отдельно?)
 
serm Дата: Понедельник, 15.09.2014, 12:32:51 | Сообщение # 4
Сообщений: 137
Репутация: 7 [ +/- ]
Цитата BarD ()
Думаю такого не может быть, код же по идее выполняется в порядке очереди сверху вниз, а имя функции работает как include, подставляет код из функции, и в порядке очереди он выполняется. У меня тож бывают сомнения, например есть while цикл, а ниже код (за пределами цикла), думаю успеет ли весь код выполниться в этом while цикле, или же может случиться так, что while еще работает, а код ниже уже выполнился. Проверить затестить несложно ж.

Вот я и не могу понять тоже . А если например во время выполнения функции (лаганет или что нибудь подобное ...)
Цитата BarD ()
Так у тебя же в каждой функции создается новая переменная i_health. Как она может поменяться, если работает отдельно?)

Это да , что то я не подумал об этом :)
 
хвостег Дата: Вторник, 16.09.2014, 09:29:03 | Сообщение # 5
Сообщений: 161
Репутация: 53 [ +/- ]
К сожалению в сурс павне есть сбои выполнения, это происходит ооооооооочень редко, однако это очень неприятное явление.
Как обойти?
1 - нужно быть на 100% уверенным, что сбой произошел.
2 - отправить кусок оборванного кода в следующий фрейм.

Приведу пример сбоя.

public Func()
{
// тут куча стандартных функций
// ... выполняется исправно
// ... выполняется исправно
// ... выполняется исправно
// ... выполняется исправно
// ... выполняется исправно
TeleportEntity(...) - Сбой выполнения (по логике вещей она должна была выполниться корректно, однако она как бы выполнилась, но без результата, либо с некорректным результатом *все входные данные при этом абсолютно верны*)
*Функция может быть любой, телепорт ентити просто для примера*
// опять куча стандартных функций
// ... выполняется исправно
// ... выполняется исправно
// ... выполняется исправно
}


Сообщение отредактировал хвостег - Вторник, 16.09.2014, 09:40:18
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Выполнение какой либо функции
  • Страница 1 из 1
  • 1
Поиск: