Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
HTTP in a Background Thread (Asynchronous HTTP)This example shows the technique one would follow to run any Chilkat HTTP method in a background task. (Only HTTP methods that communicate with an HTTP server are background-enabled. Methods that perform no HTTP communications return immediately and never need to be backgrounded.)
// Needs #include <CkHttp.h> CkString strOut; CkHttp http; bool success; // Any string unlocks the component for the 1st 30-days. success = http.UnlockComponent("Anything for 30-day trial"); if (success != true) { strOut.append(http.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } // To run an HTTP method asynchronously in a background thread, set // the UseBgThread property equal to true http.put_UseBgThread(true); // For those programming languages that support event callbacks: // events are not fired when a task is running in the background thread. // Instead, Chilkat has added the "event log" mechanism. While the // background task is running, events that normally would've been fired // are accumulated in the event log. Your application may periodically check // the event log to keep track of the progress of the background task. // To enable event logging, set the KeepEventLog property = true http.put_KeepEventLog(true); // Start an asynchronous HTTP download in a background thread. // The method will return cktrue if the task was successfully started. // Note: When the UseBgThread property = true, all methods involving // HTTP communications will be asynchronous. These methods include: // SynchronousRequest, QuickGetStr, QuickGet, PostUrlEncoded, XmlRpc, // XmlRpcPut, QuickPutStr, QuickGetObj, QuickDeleteStr, PutText, // PutBinary, PostBinary, PostMime, GetHead, DownloadAppend, etc. success = http.Download("http://www.chilkatsoft.com/download/ChilkatJava.zip","ChilkatJava.zip"); if (success != true) { strOut.append(http.lastErrorText()); strOut.append("\r\n"); SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); return; } else { strOut.append("Initiated asynchronous HTTP download..."); strOut.append("\r\n"); } // Write a loop to wait for the background task to complete. // Your application would typically do something different than this -- // after all... there's no point in doing the task asynchronously if your application // is simply going to wait for it to complete -- that's the same as doing it synchronously, // and that could've been achieved by a single call to the http.Download method // with the UseBgThread = false. // However... we do this here for the purpose of demonstration... while ((http.get_BgTaskRunning() == true)) { // Show the events in the event log that have accumulated so far... long n; n = http.get_EventLogCount(); if (n > 0) { long i; for (i = 0; i <= n - 1; i++) { strOut.append(http.EventLogName(i)); strOut.append(": "); strOut.append(http.EventLogValue(i)); strOut.append("\r\n"); } http.ClearEventLog(); } // In some programming languages, you might wish to handle user-interface events // For example, in C# you might call Application.DoEvents() // Sleep .1 seconds -- to keep the CPU from being 100% busy... http.SleepMs(100); } // Once the background task has completed, check it for success/failure: if (http.get_BgTaskSuccess()) { strOut.append("Background task completed successfully."); strOut.append("\r\n"); } SetDlgItemText(IDC_EDIT1,strOut.getUnicode()); |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2010 Chilkat Software, Inc. All Rights Reserved.