<?php
namespace Test;
class A {
public function T(){
sleep(1000);
//Code not possible for thread to perform
}
}
?>
Но, когда вызывается метод T, происходит зависание программы.
как я могу задержать без застревания?
я могу использовать поток, но код, который я написал с использованием API, не принимает поток.
извините за плохой английский и спасибо
Вы должны создать новый \pocketmine\Thread
объект для долгосрочной задачи, как указано в документации AsyncTask
учебный класс:
[...] * An AsyncTask does not have its own thread. It is queued into an AsyncPool and executed if there is an async worker * with no AsyncTask running. Therefore, an AsyncTask SHOULD NOT execute for more than a few seconds. For tasks that * run for a long time or infinitely, start another {@link \pocketmine\Thread} instead. [...]
Похоже, что потоки поддержки API, так что используйте их.
Я сделал библиотеку, которая явно позволяет вам использовать похожий на сон синтаксис на основе задач, используя PHP генераторы: https://github.com/SOF3/pmutil/blob/master/src/sofe/pmutil/SleepyTask.php
Пример использования: https://gist.github.com/SOF3/36813c09f086de7307dd9dab908f4aa4
Обратите внимание, что код нацелен на действительно старый API (3.0.0-ALPHA10), поэтому вы должны обновить его перед использованием.