PHPマルチスレッドの実装(PHPマルチスレッドクラス)

5693 ワード

PHPマルチスレッドの実装(PHPマルチスレッドクラス)
WEBサーバでPHPマルチスレッド機能を実現.
もちろん、マルチスレッドについて深く理解している人は、WEBサーバを通じて実現されたマルチスレッドがマルチスレッドのいくつかの効果を模倣するしかないことを知っています.本当の意味でのマルチスレッドではありません.
しかし、いずれにしても、私たちのニーズを満たすことができます.マルチスレッドのような機能が必要な場合は、このクラスを採用することができます.
view source
print ? 01. /** 02. * @title:      PHP (Thread) 03. * @version:    1.0 04. * @author:     phper.org.cn < [email protected] > 05. * @published:  2010-11-2 06. * 07. * PHP : 08. *  require_once 'thread.class.php'; 09. *  $thread = new thread(); 10. *  $thread->addthread('action_log','a'); 11. *  $thread->addthread('action_log','b'); 12. *  $thread->addthread('action_log','c'); 13. *  $thread->runthread(); 14. 15. *  function action_log($info) { 16. *      $log = 'log/' . microtime() . '.log'; 17. *      $txt = $info . "\r
\r
" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r
";
18. *      $fp = fopen($log, 'w'); 19. *      fwrite($fp, $txt); 20. *      fclose($fp); 21. *  } 22. */ 23. class   thread { 24.
  25. var   $hooks   array (); 26. var   $args   array (); 27.
  28. function   thread() { 29. } 30.
  31. function   addthread( $func ) 32. { 33. $args   array_slice (func_get_args(), 1); 34. $this ->hooks[] =  $func ; 35. $this ->args[] =  $args ; 36. return   true; 37. } 38.
  39. function   runthread() 40. { 41. if (isset( $_GET [ 'flag' ])) 42. { 43. $flag   intval ( $_GET [ 'flag' ]); 44. } 45. if ( $flag   ||  $flag   === 0) 46. { 47. call_user_func_array( $this ->hooks[ $flag ],  $this ->args[ $flag ]); 48. } 49. else 50. { 51. for ( $i   = 0,  $size   count ( $this ->hooks);  $i   $size $i ++) 52. { 53. $fp = fsockopen ( $_SERVER [ 'HTTP_HOST' ], $_SERVER [ 'SERVER_PORT' ]); 54. if ( $fp ) 55. { 56. $out   "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1\r
"
; 57. $out   .=  "Host: {$_SERVER['HTTP_HOST']}\r
"
; 58. $out   .=  "Connection: Close\r
\r
"
; 59. fputs ( $fp , $out ); 60. fclose( $fp ); 61. } 62. } 63. } 64. } 65. }
:
$thread = new thread(); $thread->addthread('func1','info1'); $thread->addthread('func2','info2'); $thread->addthread('func3','info3'); $thread->runthread();
:
addthreadはスレッド を し、 のパラメータは であり、その のパラメータ(オプション)は した に されるパラメータである.
runthreadはスレッドを する です.
 
:http://www.phper.org.cn/?post=113