Login   Register  
PHP Classes
elePHPant
Icontem

File: test/basic.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of AlexanderC  >  Threadator  >  test/basic.php  >  Download  
File: test/basic.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: Threadator
Create threads and send messages between them
Author: By
Last change: improving communications driver gracefull stop
Date: 4 months ago
Size: 1,742 bytes
 

Contents

Class file image Download
<?php
/**
 * @author AlexanderC <self@alexanderc.me>
 * @date 4/7/14
 * @time 10:30 PM
 */

require "./bootstrap.php";

for(
$i 0$i T_MAX$i++) {
    
/** @var \Threadator\Thread $thread */
    
$thread $factory->createCallable(function($thread) {
            if(!
mt_rand(01)) {
                
// create mutex
                
$mutex $thread->createMutex("echo", \Threadator\Mutex::T_FUNCTION);

                
// acquire mutex
                
if($mutex->waitAcquire()) {
                    echo 
"Mutex acquired for #{$thread->getPid()}\n";
                }

                
sleep(mt_rand(13));
                echo 
"[Mutex] Running #{$thread->getPid()}...\n";

                
// release mutex
                
if($mutex->release()) {
                    echo 
"Mutex released for #{$thread->getPid()}\n";
                }
            } else {
                echo 
"[No Mutex] Running #{$thread->getPid()}...\n";
            }

            
//echo "Running thread #{$thread->getPid()}...\n";

            
$message "test";
            
$thread->receiveMessage($message);
            
$thread->sendMessage("#{$thread->getPid()}{$message}");
        });
}

echo 
"Main process #{$runtime->getPid()} running\n";

// start all threads
$runtime->run();

// send a message to all threads
foreach($runtime->broadcastMessage(microtime(true)) as list($result$thread)) {
    echo 
"Result for msg #{$thread->getPid()} -> {$result}\n";
}

// receive thread messages
$messages = [];
foreach(
$runtime->receiveMessage() as $result => $message) {
    if(
$result) {
        
$messages[] = $message;
    }
}
echo 
"Messages: " implode(", "$messages) . "\n";

// end work
$runtime->join();
exit(
"Main process #{$runtime->getPid()} stopped\n");