cURL
Haxx ad
libcurl

Shopping cart software, Online file storage, Online photo storage, Hosted shopping cart, Contact management software, Email marketing software, Project management software, Issue tracking software, Online notepad, Web publishing software

curl's project page on SourceForge.net

Sponsors:
Haxx

cURL > libcurl > C API index > Example Source Codes > multithread.c

multithread.c

Download multithread.c
/*****************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * $Id: multithread.c,v 1.4 2008-04-03 20:28:33 danf Exp $
 */ 
 
/* A multi-threaded example that uses pthreads extensively to fetch
 * X remote files at once */ 
 
#include <stdio.h>
#include <pthread.h>
#include <curl/curl.h>
 
#define NUMT 4
 
/*
  List of URLs to fetch.
 
  If you intend to use a SSL-based protocol here you MUST setup the OpenSSL
  callback functions as described here:
 
  http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
 
*/ 
const char * const urls[NUMT]= {
  "http://curl.haxx.se/",
  "ftp://cool.haxx.se/",
  "http://www.contactor.se/",
  "www.haxx.se"
};
 
static void *pull_one_url(void *url)
{
  CURL *curl;
 
  curl = curl_easy_init();
  curl_easy_setopt(curl, CURLOPT_URL, url);
  curl_easy_perform(curl); /* ignores error */ 
  curl_easy_cleanup(curl);
 
  return NULL;
}
 
 
/*
   int pthread_create(pthread_t *new_thread_ID,
   const pthread_attr_t *attr,
   void * (*start_func)(void *), void *arg);
*/ 
 
int main(int argc, char **argv)
{
  pthread_t tid[NUMT];
  int i;
  int error;
 
  /* Must initialize libcurl before any threads are started */ 
  curl_global_init(CURL_GLOBAL_ALL);
 
  for(i=0; i< NUMT; i++) {
    error = pthread_create(&tid[i],
                           NULL, /* default attributes please */ 
                           pull_one_url,
                           (void *)urls[i]);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
  }
 
  /* now wait for all threads to terminate */ 
  for(i=0; i< NUMT; i++) {
    error = pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }
 
  return 0;
}

All Examples

10-at-a-time.c
anyauthput.c
cacertinmem.c
certinfo.c
chkspeed.c
cookie_interface.c
curlgtk.c
curlx.c
debug.c
evhiperfifo.c
fileupload.c
fopen.c
ftpget.c
ftpgetinfo.c
ftpgetresp.c
ftpupload.c
ftpuploadresume.c
getinfo.c
getinmemory.c
ghiper.c
hiperfifo.c
htmltidy.c
http-post.c
httpcustomheader.c
httpput.c
https.c
multi-app.c
multi-debugcallback.c
multi-double.c
multi-post.c
multi-single.c
multithread.c
opensslthreadlock.c
persistant.c
post-callback.c
postit2.c
sampleconv.c
sendrecv.c
sepheaders.c
simple.c
simplepost.c
simplessl.c
smooth-gtk-thread.c
synctime.c
threaded-ssl.c

You'll also find all examples in the distribution archive, in the docs/examples directory.

donate! Page updated January 04, 2010.
web site info

File upload with ASP.NET