Сейчас 20:15:23 Четверг, 28 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Принудительное завершение потока
ImpregnableДата: Вторник, 09 Октября 2012, 12:40:58 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Данная статься предназначена только для общего обогащения, поэтому решайте сами стоит ли вам тратить на это время.

Речь пойдет о гениальных программистах Blizzard, а точнее о том, что они сделали. А сделали они довольно много полезного, и все для того, чтобы нам было удобнее кодить. Все перечислять не буду, уж слишком много пришлось бы печатать. А сейчас о:

Принудительное завершение потока

Вы никогда не задумывались почему War3 никогда не зависает выполняя бесконечные циклы? Оказывается, Близы знали, что мы не умеем кодить, поэтому им надо было как-то уберечь нас от постоянного запуска "Диспетчера задач". И был введен счетчик, который достигая значения 300.000 завершает поток.
Так от чего же увеличивается значение счетчика? Да, от всех операторов. Ниже показано что и сколько добавляет (назовем) ESP(End Stream Points).

отсутствие .(это точка) для real - 1 ESP
+, -, /, * - 4 ESP
+ для строковых констант (пример: s + " hello") - 0 ESP
==, !=, >, <, >=, <= - 4 ESP
and, or - 3 ESP
not - 1 ESP

============================================================================
call - 1 ESP
local - 1 ESP
=/set - 2 ESP

============================================================================
//Переменные

обращение к переменной - 0 ESP
обращение к массиву переменных - 1 ESP

============================================================================
//условие

if - 1 ESP
else - 0 ESP
elseif проверка условия - 3 ESP
первый elseif у которого условие не проверялось - 2 ESP
все последующие elseif у которых условие не проверялось - 3 ESP
примеры:
Code

if true then = 1 ESP
      ...
elseif ... = 2 ESP
      ...
elseif ... = 0 ESP
endif

Code

if false then = 1 ESP
      ...
elseif false then = 3 ESP
      ...
elseif true then = 3 ESP
      ...
elseif false then = 2 ESP
      ...
elseif ... then = 0 ESP
      ...
endif

Code

if false then = 1 ESP
      ...
elseif false = 3 ESP
      ...
elseif false = 3 ESP
      ...
else = 0 ESP
      ...
endif

============================================================================
//цикл

loop - 1 ESP
exitwhen даже, если не дошло - 2 ESP
пример:
Code

loop = 1 ESP
      exitwhen ... = 2 ESP

      if false then = 1 ESP
          exitwhen ... = 2 ESP
          exitwhen ... = 2 ESP
      endif
endloop

============================================================================
//Вызов функций в файле скрипта

call <funcname> (takes nothing) - 2 ESP (без учета call)
call <funcname> (takes ...) - 1 ESP и по 3 ESP за каждый аргумент (без учета call)
call <funcname> (... returns <type>) - 1 ESP (без учета call)
return - 0 ESP
return <type> (даже, если не дошло как exitwhen) - 1 ESP

============================================================================
//Вызов native функций

каждый аргумент - 2 ESP
пример:
Code

      CreateUnit(pl, 'hpea', 0., 0., 0.) = 10 ESP


Если долго мучиться, то может,
все равно нихуя не получится.


Сообщение отредактировал SirNikolas - Вторник, 09 Октября 2012, 13:05:01
 

Ty3uKДата: Вторник, 09 Октября 2012, 12:55:19 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
можно вытащить из-под спойлера?
с телефона он не открывается


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Вторник, 09 Октября 2012, 13:05:12 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Можно еще добавить, что завершение потока происходит при делении на ноль (неважно, целочисленном или действительном), обращении к неинициализированной переменной, не являющейся массивом и (точные условия не выяснены) вызове TriggerSleepAction.

Добавлено (09 Октября 2012, 13:05:12)
---------------------------------------------
Вытащил.


 

Ty3uKДата: Вторник, 09 Октября 2012, 13:11:42 | Сообщение # 4
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
я так повесил поток, вызвав ХэндлИд на переменную без значения

последующее действие зациклилось (удаление создающегося эффекта)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Среда, 10 Октября 2012, 10:52:14 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
By the way, потоки исполнения обычно называют тредами, а не стримами.

 

ImpregnableДата: Среда, 10 Октября 2012, 13:13:12 | Сообщение # 6
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Quote (SirNikolas)
потоки исполнения обычно называют тредами

Точно. Вспомнил.


Если долго мучиться, то может,
все равно нихуя не получится.
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz