这可能是一个菜鸟问题,请考虑以下脚本,简而言之,对应于我的真实代码:
---------------- class -------------
<?php
class BaseClass {
public $flag;
function __construct() {
$this->flag = 0;
}
function mainMethod() {
sleep(3);
$this->flag = 1;
}
function getFlag() {
return $this->flag;
}
}
?>
---------------创建新实例-------------
<?php
require_once('test_class.php');
$test = new BaseClass;
$test -> mainMethod();
while($test -> getFlag() != 1) {
usleep(1000000); // 1sec.
echo "waiting";
}
?>
当实例化上述类时,构造函数将 $ flag 设置为 0 。然后调用 mainMethod(),它会休眠3秒。然后将 $ flag 设置为 1 。程序&#34; while&#34;循环下面检查 $ flag 值。理想情况下,它应该返回字符串&#34;等待&#34; 3次才允许脚本完成,但它不会。代码是线性执行的,&#34; while&#34; 循环永远不会在 mainMethod()完成其休眠时间之前执行(因此永远不会回复&#34;等待&#34;。)
也许我认为我可以使用 pcntl_fork()将调用拆分为2个不同的进程,但是此代码在Win 2008上运行。是否有一种简单的方法可以使&#34;在处理 mainMethod()时,&#34; 循环工作(异步)?
谢谢。
答案 0 :(得分:0)
假设这是在网络服务器/浏览器中使用,我建议你重新设计: