mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
progress function example: include timed interval
Adds a timer based off of CURLINFO_TOTAL_TIME that is used to perform certain actions after a minimum amount of time has passed using the progress function. As a consequence the curl handle is now also passed into the progress function. Progress example now also includes an example of how to retreive the TOTAL_TIME and print it out.
This commit is contained in:
parent
3bbe219be2
commit
7e4daaf908
@ -22,12 +22,32 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
#define STOP_DOWNLOAD_AFTER_THIS_MANY_BYTES 6000
|
#define STOP_DOWNLOAD_AFTER_THIS_MANY_BYTES 6000
|
||||||
|
#define MINIMAL_PROGRESS_FUNCTIONALITY_INTERVAL 3
|
||||||
|
|
||||||
|
struct myprogress {
|
||||||
|
double lastruntime;
|
||||||
|
CURL *curl;
|
||||||
|
};
|
||||||
|
|
||||||
static int progress(void *p,
|
static int progress(void *p,
|
||||||
double dltotal, double dlnow,
|
double dltotal, double dlnow,
|
||||||
double ultotal, double ulnow)
|
double ultotal, double ulnow)
|
||||||
{
|
{
|
||||||
|
struct myprogress *myp = (struct myprogress *)p;
|
||||||
|
CURL *curl = myp->curl;
|
||||||
|
double curtime = 0;
|
||||||
|
|
||||||
|
curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &curtime);
|
||||||
|
|
||||||
|
/* under certain circumstances it may be desirable for certain functionality
|
||||||
|
to only run every N seconds, in order to do this the transaction time can
|
||||||
|
be used */
|
||||||
|
if((curtime - myp->lastruntime) >= MINIMAL_PROGRESS_FUNCTIONALITY_INTERVAL) {
|
||||||
|
myp->lastruntime = curtime;
|
||||||
|
fprintf(stderr, "TOTAL TIME: %f \r\n", curtime);
|
||||||
|
}
|
||||||
|
|
||||||
fprintf(stderr, "UP: %g of %g DOWN: %g of %g\r\n",
|
fprintf(stderr, "UP: %g of %g DOWN: %g of %g\r\n",
|
||||||
ulnow, ultotal, dlnow, dltotal);
|
ulnow, ultotal, dlnow, dltotal);
|
||||||
|
|
||||||
@ -40,11 +60,17 @@ int main(void)
|
|||||||
{
|
{
|
||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res=0;
|
CURLcode res=0;
|
||||||
|
struct myprogress prog;
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
|
prog.lastruntime = 0;
|
||||||
|
prog.curl = curl;
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
|
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
|
||||||
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress);
|
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress);
|
||||||
|
/* pass the struct pointer into the progress function */
|
||||||
|
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &prog);
|
||||||
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user