diff options
-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); |