在外部调用stop来进行停止,但是现在调用也停止不掉global $getDataThread;
$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();

解决方案 »

  1.   

    在外部调用stop来进行停止,但是现在调用也停止不掉$getDataThread = new auto_get_data_thread();//全局变量global $getDataThread;
    $_GET['data']=='true'?$getDataThread->start():$getDataThread->stop();
      

  2.   

    你的 run 方法中不是有一个死循环吗?
    一旦 $this->run(); 了不就退不出来了吗?
      

  3.   

    修改代码后如下:
    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();
    现在开始后直接就不执行了。。
      

  4.   

    看来你对 web 方式的 php 运行机制都不太了解哦你用 $_GET['data'] 做控制源
    却不知每个 http 会话作用到的是同一代码的不同实例
      

  5.   

    每次发送请求到服务器执行PHP脚本时应该都是开一个新的PHP线程去运行的吧
    必须让每次请求都触发的线程有共同识别的一个全局变量才能让它们判断状态来停止
    我虽然没做过但想到个笨方法就是往一个文件里面写标记,比如1就是继续运行,另一个线程写入0,那原来的线程再读出来判断到是0的时候就停止..