Sample code for 30+ languages & platforms
PHP Extension

Thread Pool Size

See more Async Examples

Demonstrates how to set the maximum number of threads in Chilkat's thread pool manager. Also demonstrates how to set a thread pool log file for help in diagnosing unexpected problems.

Chilkat PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

$success = false;

// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$success = false;

// Set the maximum number of threads in the Chilkat thread pool to 12.
// This means that no more than 12 background worker threads will exist simultaneously.
// If more than 12 tasks are queued then some must wait for a worker thread to become free.
// Note: The Chilkat thread pool manager thread is a thread distinct from the
// worker threads.  It starts when the 1st asynchronous task is Run. 
$glob = new CkGlobal();
$glob->put_MaxThreads(12);

// Also, the ThreadPoolLogPath can be set to cause the thread pool manager thread to
// keep a log file. This is for the purpose of debugging if unexpected problems occur.
$glob->put_ThreadPoolLogPath('/home/users/chilkat/logs/threadPoolLog.txt');

$http1 = new CkHttp();
$http2 = new CkHttp();
$http3 = new CkHttp();

$url1 = 'http://www.marcusmiller.com/';
$url2 = 'http://www.tromboneshorty.com/';
$url3 = 'http://www.jamesmorrison.com/';

// Call the async version of the QuickGetStr method to return a task object.
// The task object is loaded, but is in the Inert state -- meaning it is
// not yet scheduled to run on Chilkat's background thread pool.
// task1 is a CkTask
$task1 = $http1->QuickGetStrAsync($url1);
if ($http1->get_LastMethodSuccess() == false) {
    print $http1->lastErrorText() . "\n";
    exit;
}

// task2 is a CkTask
$task2 = $http2->QuickGetStrAsync($url2);
if ($http2->get_LastMethodSuccess() == false) {
    print $http2->lastErrorText() . "\n";

    exit;
}

// task3 is a CkTask
$task3 = $http3->QuickGetStrAsync($url3);
if ($http3->get_LastMethodSuccess() == false) {
    print $http3->lastErrorText() . "\n";

    exit;
}

// At this point we have 3 task objects, each loaded with a Chilkat method call.
// Note: At this point no background threads are running.  The thread pool manager
// thread is not started -- it will start when the very first task is Run.

// Schedule each task for running on the thread pool.  This changes each task's state
// from Inert to Live. The thread pool manager thread starts with the 1st task queued.
// If the Global.ThreadPoolLogPath property was set, then
// the log file would be created (or appended) at this point.
$success = $task1->Run();
// Assuming success for brevity...
$success = $task2->Run();
$success = $task3->Run();

// The application is now free to do anything else
// while the HTML at the URL's are being downloaded in background threads.

// In this case, we'll just wait for all three tasks to finish.
// All three tasks are running simultaneously in separate background threads.
// We can wait for each in any order.  If Wait is called and the task has already
// finished (or been canceled), then the Wait method returns immediately.
$maxWaitMs = 20000;
$success = $task1->Wait($maxWaitMs);
$success = $task2->Wait($maxWaitMs);
$success = $task3->Wait($maxWaitMs);
// Assuming success for brevity...

$err = 'Task failed or canceled';
$html1 = $err;
$html2 = $err;
$html3 = $err;

// Now get the HTML downloaded in each task:
if (($task1->get_StatusInt() == 7) and ($task1->get_TaskSuccess() == true)) {
    $html1 = $task1->getResultString();
}

if (($task2->get_StatusInt() == 7) and ($task2->get_TaskSuccess() == true)) {
    $html2 = $task2->getResultString();
}

if (($task3->get_StatusInt() == 7) and ($task3->get_TaskSuccess() == true)) {
    $html3 = $task3->getResultString();
}

print $html1 . "\n";
print '----' . "\n";
print $html2 . "\n";
print '----' . "\n";
print $html3 . "\n";
print '----' . "\n";


?>