php[world] 2019 — 25 years of PHP

La classe Thread

(PECL pthreads >= 2.0.0)

Introduction

Quand la méthode start d'un Thread est appelée, le code de la méthode run sera exécuté de façon parallèle dans un Thread séparé.

Après l'exécution de la méthode run, le Thread se terminera immédiatement, il sera rattaché au Thread d'origine par la suite.

Avertissement

S'appuyer sur le moteur pour déterminer quand un Thread sera rattaché peut provoquer un comportement non désiré. Le développeur doit être explicite tant que possible.

Synopsis de la classe

Thread extends Threaded implements Countable , Traversable , ArrayAccess {
/* Méthodes */
public detach ( void ) : void
public getCreatorId ( void ) : int
public static getCurrentThread ( void ) : Thread
public static getCurrentThreadId ( void ) : int
public getThreadId ( void ) : int
public static globally ( void ) : mixed
public isJoined ( void ) : bool
public isStarted ( void ) : bool
public join ( void ) : bool
public kill ( void ) : void
public start ([ int $options ] ) : bool
/* Méthodes héritées */
public Threaded::chunk ( int $size , bool $preserve ) : array
public Threaded::count ( void ) : int
public Threaded::extend ( string $class ) : bool
public Threaded::from ( Closure $run [, Closure $construct [, array $args ]] ) : Threaded
public Threaded::getTerminationInfo ( void ) : array
public Threaded::isRunning ( void ) : bool
public Threaded::isTerminated ( void ) : bool
public Threaded::isWaiting ( void ) : bool
public Threaded::lock ( void ) : bool
public Threaded::merge ( mixed $from [, bool $overwrite ] ) : bool
public Threaded::notify ( void ) : bool
public Threaded::notifyOne ( void ) : bool
public Threaded::pop ( void ) : bool
public Threaded::run ( void ) : void
public Threaded::shift ( void ) : boolean
public Threaded::synchronized ( Closure $block [, mixed $... ] ) : mixed
public Threaded::unlock ( void ) : bool
public Threaded::wait ([ int $timeout ] ) : bool
}

Sommaire

add a note add a note

User Contributed Notes 3 notes

up
36
german dot bernhardt at gmail dot com
5 years ago
<?php

class workerThread extends Thread {
public function
__construct($i){
 
$this->i=$i;
}

public function
run(){
  while(
true){
   echo
$this->i;
  
sleep(1);
  }
}
}

for(
$i=0;$i<50;$i++){
$workers[$i]=new workerThread($i);
$workers[$i]->start();
}

?>
up
5
german dot bernhardt at gmail dot com
3 years ago
<?php
# ERROR GLOBAL VARIABLES IMPORT

$tester=true;

function
tester(){
global
$tester;
var_dump($tester);
}

tester(); // PRINT -> bool(true)

class test extends Thread{
public function
run(){
  global
$tester;
 
tester(); // PRINT -> NULL
}
}
$workers=new test();
$workers->start();

?>
up
-50
312036773 at qq dot com
3 years ago
<?php
class STD extends Thread{
    public function
put(){
       
       
$this->synchronized(function(){
            for(
$i=0;$i<7;$i++){

   
printf("%d\n",$i);
   
$this->notify();
    if(
$i < 6)
   
$this->wait();
    else
        exit();
   
sleep(1);
}
        });

    }

        public function
flush(){
       
$this->synchronized(function(){
            for(
$i=0;$i<7;$i++){
   
flush();
   
$this->notify();
    if(
$i < 6)
   
$this->wait();
    else
        exit();
    }
});
}
}

class
A extends Thread{
    private
$std;
    public function
__construct($std){
       
$this->std = $std;
    }
    public function
run(){
       
$this->std->put();
    }
}

class
B extends Thread{
    private
$std;
    public function
__construct($std){
       
$this->std = $std;
    }
    public function
run(){
       
$this->std->flush();
    }
}
ob_end_clean();
echo
str_repeat(" ", 1024);
$std = new STD();
$ta = new A($std);
$tb = new B($std);
$ta->start();
$tb->start();
To Top