php 自定义线程 停止问题 无法停止 求大神解答 在外部调用stop来进行停止,但是现在调用也停止不掉global $getDataThread;$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在外部调用stop来进行停止,但是现在调用也停止不掉$getDataThread = new auto_get_data_thread();//全局变量global $getDataThread;$_GET['data']=='true'?$getDataThread->start():$getDataThread->stop(); 你的 run 方法中不是有一个死循环吗?一旦 $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();现在开始后直接就不执行了。。 看来你对 web 方式的 php 运行机制都不太了解哦你用 $_GET['data'] 做控制源却不知每个 http 会话作用到的是同一代码的不同实例 每次发送请求到服务器执行PHP脚本时应该都是开一个新的PHP线程去运行的吧必须让每次请求都触发的线程有共同识别的一个全局变量才能让它们判断状态来停止我虽然没做过但想到个笨方法就是往一个文件里面写标记,比如1就是继续运行,另一个线程写入0,那原来的线程再读出来判断到是0的时候就停止.. 这段登陆验证代码有什么错误? 大家帮忙看看这段简单的代码错在哪里? 一个php web程序在服务器上能运行,但在其他机器上就访问不了是怎么回事? 菜鸟求"属性如何两列一行地显示?"解答. include('function.php');找不到函数怎么回事? 关于MYSQL语句中如何排序。(菜鸟别来) 插入了记录,但是记录的字段都没有进去是怎么回事情? 在php下能够直接调用客户端的excel进行报表的编辑、打印吗?其他还有什么好办法? 注册会员问题 为什么会出现cgi error? 文件上传类,我一刷新页面就显示上传文件时出错 : 未允许类型 PHP获取的系统时间 加上8小时
$_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的时候就停止..