在外部调用stop来进行停止,但是现在调用也停止不掉global $getDataThread;
$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();
$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();
$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();
一旦 $this->run(); 了不就退不出来了吗?
class auto_get_data_thread {
var $runIndex = false;//控制线程
var $interval = 30;//等待抓取时间
var $control = 'false'; //外部控制器
private function run(){
while($this->runIndex){
if(!$this->runIndex){
throw new Exception("auto_get_data_thread be stop with Exception");
break;
}
if($control == 'true')
{
insert_postdata_init();
sleep($this->interval);
}else if($control == 'false'){
break;
}
}
}
public function start(){
echo "start()";
$this->control = 'true';
echo "=".$this->control;
ignore_user_abort(TRUE);
set_time_limit(0);
$this->runIndex=true;
$this->run();
}
public function stop(){
echo "stop()";
$this->control = 'false';
echo "=".$this->control;
ignore_user_abort(FALSE);
set_time_limit(1);
$this->runIndex=false;
}
}
$getDataThread = new auto_get_data_thread();global $getDataThread;
$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();
现在开始后直接就不执行了。。
却不知每个 http 会话作用到的是同一代码的不同实例
必须让每次请求都触发的线程有共同识别的一个全局变量才能让它们判断状态来停止
我虽然没做过但想到个笨方法就是往一个文件里面写标记,比如1就是继续运行,另一个线程写入0,那原来的线程再读出来判断到是0的时候就停止..