我尝试使用PHP在Java中使用多线程执行类似的操作。我知道Javascript是单线程的,PHP也没有那么多的线程。这是我的代码:
<body>
<p id='logS'></p>
<script>
function writeMsg(msg) {
document.getElementById("logS").innerHTML += msg;
}
setInterval(function(){ // this function is for testing
document.getElementById("logS").innerHTML += "-Boop-<br/>";
},500);
</script>
<?php
$arrayTest = array();
// Add elements into array
$myVariables = 0; // some value
for($i=0;$i<count($arrayTest);$i++){
runProcess($myVariables);
echo "<script>";
echo "writeMsg('Counter '".$i."' is completed.<br/>')";
echo "</script>";
}
function runProcess($variables){
// my complicated codes (1 second to complete)
}
?>
</body>
假设我的$ arrayTest有2个元素,每个runProcess加载大约需要1秒(由于循环,sql_queries)
我希望'logS'实现的是这种格式:
-Boop-
-Boop-
计数器0完成
-Boop-
-Boop-
柜台1完成
-Boop-
-Boop-(无限回声'-Boop-'每0.5秒)
我得到的是页面运行2秒而不是Booping(对于runProcess())代码,然后只运行-Boop-s。
计数器0完成
柜台1完成
-Boop-
-Boop-(无限回声'-Boop-'每0.5秒)
所以让我们说数组中的1000个元素,意味着它将运行1000秒而不回显东西,然后在那个打印之后整个“Counter x完成”然后只启动Booping,这违背了我的代码的目的。 / p>
总结:
我想要做的是让每个计数器完成,它将显示它已完成。就像一个日志。
甚至可以在HTML,PHP和Javascript中执行此操作吗?谢谢!
答案 0 :(得分:0)
您可以在php中尝试刷新功能。
echo "<script>";
echo "writeMsg('Counter '".$i."' is completed.<br/>')";
echo "</script>";
ob_flush();
flush();