Heim > Backend-Entwicklung > PHP-Tutorial > php多线程类的代码分享

php多线程类的代码分享

WBOY
Freigeben: 2016-07-25 08:57:25
Original
813 Leute haben es durchsucht
本文介绍下,有关php中实现多线程的一个类,有需要的朋友参考下。

如何通过WEB服务器实现PHP的多线程功能呢? 在php编程中,通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

在需要类似多线程的功能时,可以参考下下面的这个类。

代码:

<?php
/**
 * @title:  PHP多线程类(Thread)
 * @version: 1.0
 * @edit by bbs.it-home.org
 * @published: 2013/7/18
 * 
 * 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 . "\r\n\r\n" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r\n";
 *   $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\r\n";
           $out .= "Host: {$_SERVER['HTTP_HOST']}\r\n";
           $out .= "Connection: Close\r\n\r\n";
                 fputs($fp,$out);
                 fclose($fp);
          }
         }
     }
    }
}
?>
Nach dem Login kopieren

调用示例:

<?php
//多线程调用示例
$thread = new thread();
$thread->addthread('func1','info1');
$thread->addthread('func2','info2');
$thread->addthread('func3','info3');
$thread->runthread();
?>
Nach dem Login kopieren

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

附,下载地址:php多线程类的源码。



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage