From 7e4daaf908307220e408754f84a5706efe230a38 Mon Sep 17 00:00:00 2001 From: Rob Ward Date: Mon, 5 Dec 2011 23:07:38 +0100 Subject: [PATCH] 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. --- docs/examples/progressfunc.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/examples/progressfunc.c b/docs/examples/progressfunc.c index 42ed3287b..a49806028 100644 --- a/docs/examples/progressfunc.c +++ b/docs/examples/progressfunc.c @@ -22,12 +22,32 @@ #include #include -#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, double dltotal, double dlnow, 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", ulnow, ultotal, dlnow, dltotal); @@ -40,11 +60,17 @@ int main(void) { CURL *curl; CURLcode res=0; + struct myprogress prog; curl = curl_easy_init(); if(curl) { + prog.lastruntime = 0; + prog.curl = curl; + curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/"); 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); res = curl_easy_perform(curl);