php 闹钟程序,PHP: pcntl_alarm - Manual

This is that universal timeout functionality you dreamed about and always wanted to have and guess what - it's as reliable as it gets, it's basically bulletproof. It can interrupt absolutely anything you throw at it and more, you name it - socket_connect(), socket_read(), fread(), infinite while() loops, sleep(), semaphores - seriously, any blocking operation. You can specify your own handler and just get over anything that normally would make your code unresponsive.

* Because we shouldn't handle asynchronous

* events in synchronous manner.

*/pcntl_async_signals(TRUE);/**

* Some flag we can change to know for sure

* that our operation timed out.

*/$timed_out=FALSE;/**

* Register SIGALRM signal handler to avoid

* getting our process killed when signal arrives.

*/pcntl_signal(SIGALRM, function($signal) use ($timed_out) {$timed_out=TRUE;

});/**

* Now we set our timeout for 2 seconds, but it's not set in stone

* we can call pcntl_alarm() anytime to extend or to turn if off.

*/pcntl_alarm(2);/**

* Here we do something with unpredictable outcome that could

* possibly block our program for a very long time.

* I like sockets as an example, but it can be anything.

*/$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);$connection=socket_connect($socket,'irc.ircnet.com',6667);/**

* If our blocking operation didn't timed out then

* timer is still ticking, we should turn it off ASAP.

*/$timed_out||pcntl_alarm(0);/**

* And now we do whatever we want to do.

*/$status=$connection?'Connected.': ($timed_out?'Timed out.':socket_strerror(socket_last_error($socket)));

echo'STATUS: '.$status.PHP_EOL;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值