注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

让你的PHP程序真正的实现多线程(PHP多线程类)  

2012-05-03 18:13:53|  分类: php多线程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://www.phpero.com/a/tuozhanzhishi/qita/2012/0503/262.html

通过WEB服务器来实现PHP多线程功能。

当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类。
 

PHP Code复制内容到剪贴板
/**   
 * @title:      PHP多线程类(Thread)   
 * @version:    1.0   
 * @author:     phper.org.cn < web@phper.org.cn >   
 * @published:  2010-11-2   
 *    
 * PHP多线程应用示例:   
 *  require_once 'thread.class.php';   
 *  $thread = new thread();   
 *  $thread->addthread('action_log','a');   
 *  $thread->addthread('action_log','b');   
 *  $thread->addthread('action_log','c');   
 *  $thread->runthread();   
 *     
 *  function action_log($info) {   
 *      $log = 'log/' . microtime() . '.log';   
 *      $txt = $info . " " . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . " ";   
 *      $fp = fopen($log, 'w');   
 *      fwrite($fp, $txt);   
 *      fclose($fp);   
 *  }   
 */  
class thread {    
         
    var $hooks = array();    
    var $args = array();    
         
    function thread() {    
    }    
         
    function addthread($func)    
    {    
        $args = array_slice(func_get_args(), 1);    
        $this->hooks[] = $func;    
        $this->args[] = $args;    
        return true;    
    }    
         
    function runthread()    
    {    
        if(isset($_GET['flag']))    
        {    
            $flag = intval($_GET['flag']);    
        }    
        if($flag || $flag === 0)    
        {    
            call_user_func_array($this->hooks[$flag], $this->args[$flag]);    
        }    
        else    
        {    
            for($i = 0, $size = count($this->hooks); $i < $size$i++)    
            {    
                $fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']);    
                if($fp)    
                {    
                    $out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1 ";    
                    $out .= "Host: {$_SERVER['HTTP_HOST']} ";    
                    $out .= "Connection: Close ";    
                    fputs($fp,$out);    
                    fclose($fp);    
                }    
            }    
        }    
    }    
}  

使用方法:

PHP Code复制内容到剪贴板
$thread = new thread();    
$thread->addthread('func1','info1');    
$thread->addthread('func2','info2');    
$thread->addthread('func3','info3');    
$thread->runthread();  

说明:

addthread是添加线程函数,第一个参数是函数名,之后的参数(可选)为传递给指定函数的参数。

runthread是执行线程的函数。

  评论这张
 
阅读(715)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018