Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) 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.
#import <CkoGlobal.h> #import <CkoHttp.h> #import <NSString.h> #import <CkoTask.h> // All Chilkat classes can be unlocked at once at the beginning of a program // by calling UnlockBundle. It requires a Bundle unlock code. CkoGlobal *chilkatGlob = [[CkoGlobal alloc] init]; BOOL success = [chilkatGlob UnlockBundle: @"Anything for 30-day trial."]; if (success != YES) { NSLog(@"%@",chilkatGlob.LastErrorText); return; } // 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. chilkatGlob.MaxThreads = [NSNumber numberWithInt: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. chilkatGlob.ThreadPoolLogPath = @"/home/users/chilkat/logs/threadPoolLog.txt"; CkoHttp *http1 = [[CkoHttp alloc] init]; CkoHttp *http2 = [[CkoHttp alloc] init]; CkoHttp *http3 = [[CkoHttp alloc] init]; NSString *url1 = @"http://www.marcusmiller.com/"; NSString *url2 = @"http://www.tromboneshorty.com/"; NSString *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. CkoTask *task1 = [http1 QuickGetStrAsync: url1]; if (http1.LastMethodSuccess == NO) { NSLog(@"%@",http1.LastErrorText); return; } CkoTask *task2 = [http2 QuickGetStrAsync: url2]; if (http2.LastMethodSuccess == NO) { NSLog(@"%@",http2.LastErrorText); return; } CkoTask *task3 = [http3 QuickGetStrAsync: url3]; if (http3.LastMethodSuccess == NO) { NSLog(@"%@",http3.LastErrorText); return; } // 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. int maxWaitMs = 20000; success = [task1 Wait: [NSNumber numberWithInt: maxWaitMs]]; success = [task2 Wait: [NSNumber numberWithInt: maxWaitMs]]; success = [task3 Wait: [NSNumber numberWithInt: maxWaitMs]]; // Assuming success for brevity... NSString *err = @"Task failed or canceled"; NSString *html1 = err; NSString *html2 = err; NSString *html3 = err; // Now get the HTML downloaded in each task: if (([task1.StatusInt intValue] == 7) && (task1.TaskSuccess == YES)) { html1 = [task1 GetResultString]; } if (([task2.StatusInt intValue] == 7) && (task2.TaskSuccess == YES)) { html2 = [task2 GetResultString]; } if (([task3.StatusInt intValue] == 7) && (task3.TaskSuccess == YES)) { html3 = [task3 GetResultString]; } NSLog(@"%@",html1); NSLog(@"%@",@"----"); NSLog(@"%@",html2); NSLog(@"%@",@"----"); NSLog(@"%@",html3); NSLog(@"%@",@"----"); |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.