Мне нужен эффективный способ вызвать функцию//метод//код из переменной//массива//хеш-таблицы. Я знаю, что можно вызвать функцию через функцию (непомню название) по имени или прикрепить функцию к тригеру и вызвать его. Это решение к которому я прибегну, если не найду ничего лучше. Также я видел в мемхаке функции типа fast_call и std_call, их можно использовать для вызова моих функций без неприятных последствий и есть ли в этом смысл?
Какие еще есть варианты? Какой способ самый быстрый, и какие будут побочные эффекты, если они есть?
Принятый ответ
Что делать то собрался? fast_call и std_call это жутко медленные костыли чтобы вызывать внутренние функции игры из жасса, к примеру функции оглушения юнита (которая находятся внутри game.dll), и использовать их бездумно = увидеть фпс в 6 кадров.
функция это code, указатель на функцию, она не может быть обьявлена массивом, но через C2I функцию мемхака можно получить целочисленный указатель на эту функцию, и записать его в массив целочисленных, после вернуть обратно и вызвать через ForGroup или ForForce, execute func не очень по производительности по сравнению с калбеками. ExecuteTrigger еще хуже в этом плане, скидывали же мемхак с тестом скорости.
В целом можно сделать массив групп\триггеров \таймеров и добавлять каждому по фунцкции, и вызывать.
функция это code, указатель на функцию, она не может быть обьявлена массивом, но через C2I функцию мемхака можно получить целочисленный указатель на эту функцию, и записать его в массив целочисленных, после вернуть обратно и вызвать через ForGroup или ForForce, execute func не очень по производительности по сравнению с калбеками. ExecuteTrigger еще хуже в этом плане, скидывали же мемхак с тестом скорости.
В целом можно сделать массив групп\триггеров \таймеров и добавлять каждому по фунцкции, и вызывать.
Так же стоит сразу задуматься о том как передать в калбеки данные...
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
На чистом джассе работа с функциями очень ограничена и ооп не получится
Ред. EugeAl
Ред. quq_CCCP
Ни в хт, никуда не записать, code чисто для калбеков и никуда в jass его не запихать. ExecuteFunc не очень в плане производительности, нет конечно в обычных условиях похер, но вот 70000 вызовов наверное кончатся фаталом. Там создается новый поток и вычисляется событие которое его вызвало для того чтобы из потока родителя, в дочерний поток перешли все GetTrigger*** нативки, его можно представить как создание еще 1 триггера, добавления ему указанной функции и подцеплению к событию что вызвало поток родитель.
функция это code, указатель на функцию, она не может быть обьявлена массивом, но через C2I функцию мемхака можно получить целочисленный указатель на эту функцию, и записать его в массив целочисленных, после вернуть обратно и вызвать через ForGroup или ForForce, execute func не очень по производительности по сравнению с калбеками. ExecuteTrigger еще хуже в этом плане, скидывали же мемхак с тестом скорости.
В целом можно сделать массив групп\триггеров \таймеров и добавлять каждому по фунцкции, и вызывать.
Ред. jass_dev
Ред. jass_dev