haxelib run не может запустить новые потоки?
Получение исключения при попытке использовать команду haxelib run
Main.hx:5: starting
D:HaxeToolkithaxestd/neko/vm/Thread.hx:54: characters 20-71 : Can't create thread from within a macro
D:HaxeToolkithaxelibhaxelib-test/0,0,1/src/Main.hx:6: characters 29-48 : Called from
?:1: characters 1048575-8796094070782 : Called from
Aborted
Завернутый код haxe:
import neko.vm.Thread;
class Main {
static function main() {
trace("starting");
var commandsThread = Thread.create(read);
trace("ending");
}
static function read() {
trace("new thread");
}
}
Без функциональности потока все работает нормально.
Отредактировано:
Я запускаю этот код с помощью команды haxelib run: https://lib.haxe.org/documentation/using-haxelib/#run
haxelib install haxelib-test.zip
haxelib run haxelib-test
Перед этим нужно создать папку haxelib.json
и почтовый индекс
https://lib.haxe.org/documentation/creating-a-haxelib-package/
Мой haxelib.json
{
"name": "haxelib-test",
"license": "MIT",
"tags": [],
"description": "",
"version": "0.0.1",
"classPath": "src/",
"main": "Main"
}
(следите за свойствами classPath, мой основной класс - /src/Main.hx
)
1 ответ:
Из haxelib docs, которые вы связали :
БиблиотекиПоскольку вы предоставляете классС помощником
run.n
или основным классом, определенным вhaxelib.json
, могут быть выполнены с использованиемhaxelib run
main
, Haxelib пытается запустить ваш код во встроенном интерпретаторе Haxe (с аргументом командной строки--interp
). К сожалению, интерпретатор не поддерживает потоки. Он в основном используется для макросов, поэтому сообщение об ошибке может быть немного запутанным.Вы можете просто обойдите это, скомпилировав файл
run.n
и упаковав его с вашей библиотекой, поэтому сценарий выполняется в NEKO VM (которая поставляется в комплекте с Haxe):haxe -main Main -neko run.n
Примечание: для разработки и тестирования может быть удобнее настроить каталог разработки с помощью
haxelib dev
, поэтому вам не нужно переупаковывать и устанавливать.zip
каждый раз, когда вы что-то меняете.Поддержку многопоточности для новый макрос переводчик на Haxe 4 называется "ивала" в это выпуск .