diff options
author | Rob Ward <rob@rob-ward.co.uk> | 2011-12-05 23:07:38 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2011-12-05 23:13:34 +0100 |
commit | 7e4daaf908307220e408754f84a5706efe230a38 (patch) | |
tree | bd3628c82d00ab47942a6f9ea437ab3b2942058b /docs/examples | |
parent | 3bbe219be2071a4fa97784da556d810500700002 (diff) |
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.
Diffstat (limited to 'docs/examples')
-rw-r--r-- | docs/examples/progressfunc.c | 28 |
1 files changed, 27 insertions, 1 deletions
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 <stdio.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, 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); |