aboutsummaryrefslogtreecommitdiffstats
path: root/docs/examples/multithread.c
diff options
context:
space:
mode:
authorLucas Eckels <eckels@google.com>2012-08-06 15:07:02 -0700
committerLucas Eckels <eckels@google.com>2012-08-08 09:28:48 -0700
commit9bd90e6e25f1e55f50201c87a1b5837de7e5b64a (patch)
treed2061a00d7d0ee884170bc955fceeed2d0edf284 /docs/examples/multithread.c
parente6f2b03027b5feb92b30f5d47801ec3fabe9fd95 (diff)
downloadandroid_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.tar.gz
android_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.tar.bz2
android_external_curl-9bd90e6e25f1e55f50201c87a1b5837de7e5b64a.zip
Add Music Manager's curl 7.21.2 source.
Change-Id: I259a43fa52d581524a5ce8ae1711467acb1d9d50
Diffstat (limited to 'docs/examples/multithread.c')
-rw-r--r--docs/examples/multithread.c81
1 files changed, 81 insertions, 0 deletions
diff --git a/docs/examples/multithread.c b/docs/examples/multithread.c
new file mode 100644
index 0000000..5f59a99
--- /dev/null
+++ b/docs/examples/multithread.c
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ */
+
+/* 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;
+}