Sample code for 30+ languages & platforms
Lianja

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 Lianja Downloads

Lianja
llSuccess = .F.

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

llSuccess = .F.

// 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. 
loGlob = createobject("CkGlobal")
loGlob.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.
loGlob.ThreadPoolLogPath = "/home/users/chilkat/logs/threadPoolLog.txt"

loHttp1 = createobject("CkHttp")
loHttp2 = createobject("CkHttp")
loHttp3 = createobject("CkHttp")

lcUrl1 = "http://www.marcusmiller.com/"
lcUrl2 = "http://www.tromboneshorty.com/"
lcUrl3 = "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.
loTask1 = loHttp1.QuickGetStrAsync(lcUrl1)
if (loHttp1.LastMethodSuccess = .F.) then
    ? loHttp1.LastErrorText
    release loGlob
    release loHttp1
    release loHttp2
    release loHttp3
    return
endif

loTask2 = loHttp2.QuickGetStrAsync(lcUrl2)
if (loHttp2.LastMethodSuccess = .F.) then
    ? loHttp2.LastErrorText
    release loTask1
    release loGlob
    release loHttp1
    release loHttp2
    release loHttp3
    return
endif

loTask3 = loHttp3.QuickGetStrAsync(lcUrl3)
if (loHttp3.LastMethodSuccess = .F.) then
    ? loHttp3.LastErrorText
    release loTask1
    release loTask2
    release loGlob
    release loHttp1
    release loHttp2
    release loHttp3
    return
endif

// 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.
llSuccess = loTask1.Run()
// Assuming success for brevity...
llSuccess = loTask2.Run()
llSuccess = loTask3.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.
lnMaxWaitMs = 20000
llSuccess = loTask1.Wait(lnMaxWaitMs)
llSuccess = loTask2.Wait(lnMaxWaitMs)
llSuccess = loTask3.Wait(lnMaxWaitMs)
// Assuming success for brevity...

lcErr = "Task failed or canceled"
lcHtml1 = lcErr
lcHtml2 = lcErr
lcHtml3 = lcErr

// Now get the HTML downloaded in each task:
if ((loTask1.StatusInt = 7) and (loTask1.TaskSuccess = .T.)) then
    lcHtml1 = loTask1.GetResultString()
endif

if ((loTask2.StatusInt = 7) and (loTask2.TaskSuccess = .T.)) then
    lcHtml2 = loTask2.GetResultString()
endif

if ((loTask3.StatusInt = 7) and (loTask3.TaskSuccess = .T.)) then
    lcHtml3 = loTask3.GetResultString()
endif

? lcHtml1
? "----"
? lcHtml2
? "----"
? lcHtml3
? "----"

release loTask1
release loTask2
release loTask3


release loGlob
release loHttp1
release loHttp2
release loHttp3