Ruby
Ruby
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 Ruby Downloads
require 'chilkat'
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 = Chilkat::CkGlobal.new()
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 = Chilkat::CkHttp.new()
http2 = Chilkat::CkHttp.new()
http3 = Chilkat::CkHttp.new()
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
end
# task2 is a CkTask
task2 = http2.QuickGetStrAsync(url2)
if (http2.get_LastMethodSuccess() == false)
print http2.lastErrorText() + "\n";
exit
end
# task3 is a CkTask
task3 = http3.QuickGetStrAsync(url3)
if (http3.get_LastMethodSuccess() == false)
print http3.lastErrorText() + "\n";
exit
end
# 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()
end
if ((task2.get_StatusInt() == 7) and (task2.get_TaskSuccess() == true))
html2 = task2.getResultString()
end
if ((task3.get_StatusInt() == 7) and (task3.get_TaskSuccess() == true))
html3 = task3.getResultString()
end
print html1 + "\n";
print "----" + "\n";
print html2 + "\n";
print "----" + "\n";
print html3 + "\n";
print "----" + "\n";