<?php
namespace Test;
class A {
public function T(){
sleep(1000);
//Code not possible for thread to perform
}
}
?>
但是,当调用方法 T 时,发生了 Program Stuck。我怎样才能延迟而不卡住?
我可以使用线程,但是我使用 API 编写的代码不接受线程。
抱歉英语不好,谢谢
<?php
namespace Test;
class A {
public function T(){
sleep(1000);
//Code not possible for thread to perform
}
}
?>
但是,当调用方法 T 时,发生了 Program Stuck。我怎样才能延迟而不卡住?
我可以使用线程,但是我使用 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),因此您必须在使用前对其进行更新。