46 pthread_mutex_t
lock = PTHREAD_MUTEX_INITIALIZER;
49 const char *
const urls[]= {
64 return fwrite(ptr, size, nmemb, stream);
76 pthread_mutex_lock(&
lock);
81 g_strdup_printf(
"xoap.weather.com/weather/local/%s?cc=*&dayf=5&unit=i\n",
89 outfile = fopen(
urls[j],
"wb");
99 pthread_mutex_unlock(&
lock);
121 gtk_progress_bar_pulse(GTK_PROGRESS_BAR (data));
138 error = pthread_create(&tid[i],
143 fprintf(stderr,
"Couldn't run thread number %d, errno %d\n", i, error);
145 fprintf(stderr,
"Thread %d, gets %s\n", i,
urls[i]);
150 error = pthread_join(tid[i], NULL);
151 fprintf(stderr,
"Thread %d terminated\n", i);
156 g_source_remove(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(progress_bar),
160 gtk_widget_destroy(progress_bar);
176 int main(
int argc,
char **argv)
178 GtkWidget *top_window, *outside_frame, *inside_frame, *progress_bar;
188 gtk_init(&argc, &argv);
191 top_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
194 outside_frame = gtk_frame_new(NULL);
195 gtk_frame_set_shadow_type(GTK_FRAME(outside_frame), GTK_SHADOW_OUT);
196 gtk_container_add(GTK_CONTAINER(top_window), outside_frame);
199 inside_frame = gtk_frame_new(NULL);
200 gtk_frame_set_shadow_type(GTK_FRAME(inside_frame), GTK_SHADOW_IN);
201 gtk_container_set_border_width(GTK_CONTAINER(inside_frame), 5);
202 gtk_container_add(GTK_CONTAINER(outside_frame), inside_frame);
205 progress_bar = gtk_progress_bar_new();
206 gtk_progress_bar_pulse(GTK_PROGRESS_BAR (progress_bar));
208 gint pulse_ref = g_timeout_add(300,
pulse_bar, progress_bar);
209 g_object_set_data(G_OBJECT(progress_bar),
"pulse_id",
210 GINT_TO_POINTER(pulse_ref));
211 gtk_container_add(GTK_CONTAINER(inside_frame), progress_bar);
213 gtk_widget_show_all(top_window);
214 printf(
"gtk_widget_show_all\n");
216 g_signal_connect(G_OBJECT (top_window),
"delete-event",
220 g_warning(
"can't create the thread");
224 printf(
"gdk_threads_leave\n");
void * create_thread(void *progress_bar)
UNITTEST_START char * ptr
#define curl_easy_setopt(handle, option, value)
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
gboolean pulse_bar(gpointer data)
static gboolean cb_delete(GtkWidget *window, gpointer data)
size_t write_file(void *ptr, size_t size, size_t nmemb, FILE *stream)
CURL_EXTERN CURLcode curl_global_init(long flags)
curl_global_init() globally initializes curl given a bitwise set of the different features of what to...
void * pull_one_url(void *NaN)
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)
int main(int argc, char **argv)