|  | 
Chilkat  HOME  Android™  AutoIt  C  C#  C++  Chilkat2-Python  CkPython  Classic ASP  DataFlex  Delphi DLL  Go  Java  Node.js  Objective-C  PHP Extension  Perl  PowerBuilder  PowerShell  PureBasic  Ruby  SQL Server  Swift  Tcl  Unicode C  Unicode C++  VB.NET  VBScript  Visual Basic 6.0  Visual FoxPro  Xojo Plugin
| (PowerBuilder) Thread Pool SizeDemonstrates 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. 
 integer li_rc oleobject loo_ChilkatGlob integer li_Success oleobject loo_Http1 oleobject loo_Http2 oleobject loo_Http3 string ls_Url1 string ls_Url2 string ls_Url3 oleobject loo_Task1 oleobject loo_Task2 oleobject loo_Task3 integer li_MaxWaitMs string ls_Err string ls_Html1 string ls_Html2 string ls_Html3 // All Chilkat classes can be unlocked at once at the beginning of a program // by calling UnlockBundle. It requires a Bundle unlock code. loo_ChilkatGlob = create oleobject // Use "Chilkat_9_5_0.Global" for versions of Chilkat < 10.0.0 li_rc = loo_ChilkatGlob.ConnectToNewObject("Chilkat.Global") if li_rc < 0 then destroy loo_ChilkatGlob MessageBox("Error","Connecting to COM object failed") return end if li_Success = loo_ChilkatGlob.UnlockBundle("Anything for 30-day trial.") if li_Success <> 1 then Write-Debug loo_ChilkatGlob.LastErrorText destroy loo_ChilkatGlob return end if // 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. loo_ChilkatGlob.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. loo_ChilkatGlob.ThreadPoolLogPath = "/home/users/chilkat/logs/threadPoolLog.txt" loo_Http1 = create oleobject // Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 li_rc = loo_Http1.ConnectToNewObject("Chilkat.Http") loo_Http2 = create oleobject // Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 li_rc = loo_Http2.ConnectToNewObject("Chilkat.Http") loo_Http3 = create oleobject // Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 li_rc = loo_Http3.ConnectToNewObject("Chilkat.Http") ls_Url1 = "http://www.marcusmiller.com/" ls_Url2 = "http://www.tromboneshorty.com/" ls_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. loo_Task1 = loo_Http1.QuickGetStrAsync(ls_Url1) if loo_Http1.LastMethodSuccess = 0 then Write-Debug loo_Http1.LastErrorText destroy loo_ChilkatGlob destroy loo_Http1 destroy loo_Http2 destroy loo_Http3 return end if loo_Task2 = loo_Http2.QuickGetStrAsync(ls_Url2) if loo_Http2.LastMethodSuccess = 0 then Write-Debug loo_Http2.LastErrorText destroy loo_Task1 destroy loo_ChilkatGlob destroy loo_Http1 destroy loo_Http2 destroy loo_Http3 return end if loo_Task3 = loo_Http3.QuickGetStrAsync(ls_Url3) if loo_Http3.LastMethodSuccess = 0 then Write-Debug loo_Http3.LastErrorText destroy loo_Task1 destroy loo_Task2 destroy loo_ChilkatGlob destroy loo_Http1 destroy loo_Http2 destroy loo_Http3 return end if // 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. li_Success = loo_Task1.Run() // Assuming success for brevity... li_Success = loo_Task2.Run() li_Success = loo_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. li_MaxWaitMs = 20000 li_Success = loo_Task1.Wait(li_MaxWaitMs) li_Success = loo_Task2.Wait(li_MaxWaitMs) li_Success = loo_Task3.Wait(li_MaxWaitMs) // Assuming success for brevity... ls_Err = "Task failed or canceled" ls_Html1 = ls_Err ls_Html2 = ls_Err ls_Html3 = ls_Err // Now get the HTML downloaded in each task: if (loo_Task1.StatusInt = 7) AND (loo_Task1.TaskSuccess = 1) then ls_Html1 = loo_Task1.GetResultString() end if if (loo_Task2.StatusInt = 7) AND (loo_Task2.TaskSuccess = 1) then ls_Html2 = loo_Task2.GetResultString() end if if (loo_Task3.StatusInt = 7) AND (loo_Task3.TaskSuccess = 1) then ls_Html3 = loo_Task3.GetResultString() end if Write-Debug ls_Html1 Write-Debug "----" Write-Debug ls_Html2 Write-Debug "----" Write-Debug ls_Html3 Write-Debug "----" destroy loo_Task1 destroy loo_Task2 destroy loo_Task3 destroy loo_ChilkatGlob destroy loo_Http1 destroy loo_Http2 destroy loo_Http3 | ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.