Как не дождаться окончания функции? - PullRequest
2 голосов
/ 13 октября 2019

У меня есть две функции:

function f1(a:String) {
    // long processes with a...
}

function f2() {
    f1("Hey");
    ...
}

Что я хочу:

, когда я звоню f1 из f2, я не хочу блокировать f2,Кроме того, в какой-то момент кода я не хочу, чтобы f1 заканчивал (например, объединял потоки)

Я просто хочу позвонить и забыть. Он запускается сам и завершает себя.

Как мне справиться с этим в Haxe? Спасибо!

1 Ответ

3 голосов
/ 13 октября 2019

С Haxe <4, это немного громоздко. Он работает так же, как с Haxe 4, но не существует одного кроссплатформенного типа Thread, что делает все немного сложнее (cpp.vm.Thread, neko.vm.Thread и т. Д.). </p>

С Haxe 4- даже в его текущем состоянии кандидата вы достигнете этого с sys.thread.Thread. Каждый раз, когда вы хотите создать поток для выполнения вашей функции, просто вызовите Thread.create. Следует отметить, что эта функция принимает функцию без аргумента, которая ничего не возвращает. Если ваша функция принимает один или несколько аргументов, вы можете вызвать ее метод bind, как описано здесь: https://haxe.org/manual/lf-function-bindings.html.

Короче говоря:

import sys.thread.Thread;

function f2() {
    var f1thread = Thread.create(f1.bind("Hey")); // runs instantly
}

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

...