php parallel,PHP parallelEvents 用法 手册 | 示例代码

Example showing the usage of events.

The documentation still is very thin, so I'm not sure, the example is the best solution. But it works.

*/useparallel{Channel,Runtime,Events,EventsEvent};$myThread= function(Channel $channel) {$events= newEvents();$events->addChannel($channel);//$events->setBlocking(false); //Uncomment to don't block on Events::poll()$events->setTimeout(1000000);//Comment when not blockingwhile(true)

{/*

...

Your code.

...

*/

//Read all available eventstry

{$event=NULL;

do

{$event=$events->poll();//Returns non-null if there is an eventif($event&&$event->source=='myChannel')

{//It seems, the target gets deleted after returning an event,

//so add it again.$events->addChannel($channel);

if($event->type==EventType::Read)

{

if(is_array($event->value) &&count($event->value) >0)

{

if($event->value['name'] =='stop')

{

echo'Stopping thread';

return;//Stop}

else

{

echo'Event: '.$event->value['name'].' => '.$event->value['value'].PHP_EOL;

}

}

}

else if($event->type==EventType::Close) return;//Stop}

}

while($event);

}

catch(EventsErrorTimeout $ex)

{//Timeoutecho'Timeout'.PHP_EOL;

}

}

};

classMyClass{

private$runtime;

private$future;

private$channel;

public functionstart() {//Create runtime$this->runtime= newRuntime();//Create buffered channel.

//Buffered channels don't block on Channel::send().

//Note that target names need to be unique within the process.$this->channel=Channel::make('myChannel',Channel::Infinite);

global$myThread;$this->future=$this->runtime->run($myThread, [$this->channel]);

}

public functionstop() {$this->channel->send(['name'=>'stop','value'=>true]);$this->future->value();//Wait for thread to finish$this->channel->close();

}

public functionemit(string $name,$value)

{$this->channel->send(['name'=>$name,'value'=>$value]);

}

}$a= newMyClass();$a->start();

for($i=0;$i<5;$i++)

{$a->emit('test',$i);sleep(0.5);

}sleep(2);

for($i=5;$i<10;$i++)

{$a->emit('test',$i);sleep(0.5);

}$a->stop();?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值