#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <Ecore.h>
#include <Ecore_Getopt.h>
typedef struct
{
int msgs_received;
int max_msgs;
} App_Data;
typedef struct
{
} Thread_Data;
typedef struct
{
char *name;
char *base;
} Feedback_Thread_Data;
typedef struct
{
int all_done;
} App_Msg;
static void
_local_data_free(void *data)
{
Thread_Data *td = data;
char *str;
{
printf("Freeing string: %s\n", str);
free(str);
}
free(td);
}
static void
{
Thread_Data *td;
int i;
if (!td)
{
td = calloc(1, sizeof(Thread_Data));
if (!td)
{
return;
}
}
for (i = 0; i < 10; i++)
{
char buf[200];
{
break;
}
snprintf(buf, sizeof(buf), "Thread %p: String number %d", th, i);
sleep(1);
}
}
static void
{
time_t t;
int i, count;
Feedback_Thread_Data *ftd = NULL;
App_Msg *msg;
char *name;
for (i = 0; i < count; i++)
{
char buf[32];
snprintf(buf, sizeof(buf), "data%d", i);
if (!ftd)
continue;
break;
else
ftd = NULL;
}
if (!ftd)
return;
if (!it)
goto the_end;
msg = calloc(1, sizeof(App_Msg));
t = time(NULL);
{
if (time(NULL) >= (t + 2))
{
break;
}
}
the_end:
free(ftd->name);
free(ftd->base);
free(ftd);
}
static void
{
App_Data *ad = data;
App_Msg *msg;
while (1)
{
int msgs;
msgs = ad->msgs_received;
if (msgs == ad->max_msgs)
{
msg = calloc(1, sizeof(App_Msg));
msg->all_done = 1;
return;
}
}
}
static void
_print_status(void)
{
int active, pending_total, pending_feedback, pending_short, available;
printf("Status:\n\t* Active threads: %d\n"
"\t* Available threads: %d\n"
"\t* Pending short jobs: %d\n"
"\t* Pending feedback jobs: %d\n"
"\t* Pending total: %d\n", active, available, pending_short,
pending_feedback, pending_total);
}
static void
_feedback_job_msg_cb(
void *data,
Ecore_Thread *th,
void *msg_data)
{
App_Data *ad = data;
App_Msg *msg = msg_data;
char *str;
if (msg->all_done)
{
free(msg);
return;
}
_print_status();
if (!msg->list)
printf("Received an empty list from thread %p\n", th);
else
{
int i = 0;
printf("Received %d elements from threads %p (printing first 5):\n",
{
if (i <= 5)
printf("\t%s\n", str);
free(str);
i++;
}
}
ad->msgs_received++;
free(msg);
}
static void
{
App_Data *ad = data;
printf("Normal termination for thread %p.\n", th);
if (th == ad->thread_3)
ad->thread_3 = NULL;
}
static void
{
App_Data *ad = data;
printf("Thread %p got cancelled.\n", th);
if (th == ad->thread_3)
ad->thread_3 = NULL;
}
_cancel_timer_cb(void *data)
{
App_Data *ad = data;
}
{
_print_status();
}
"ecore_thread_example",
NULL,
"0.0",
"(C) 2011 Enlightenment",
"Public domain?",
"Example program for Ecore_Thread",
0,
{
}
};
int
main(int argc, char *argv[])
{
int i, max_threads = 0, max_msgs = 0;
App_Data appdata;
};
printf("Initial max threads: %d\n", i);
memset(&appdata, 0, sizeof(App_Data));
appdata.max_msgs = 1;
{
printf("Argument parsing failed\n");
return 1;
}
if (opt_quit)
return 0;
if (max_threads)
{
}
if (max_msgs)
appdata.max_msgs = max_msgs;
if (!path_list)
{
Feedback_Thread_Data *ftd;
ftd = calloc(1, sizeof(Feedback_Thread_Data));
ftd->name = strdup("data0");
#ifdef _WIN32
ftd->base = strdup("c:/windows/System32");
#else
ftd->base = strdup("/usr/bin");
#endif
ftd = calloc(1, sizeof(Feedback_Thread_Data));
ftd->name = strdup("data1");
#ifdef _WIN32
ftd->base = strdup("c:/windows/Fonts");
#else
ftd->base = strdup("/usr/lib");
#endif
ftd = calloc(1, sizeof(Feedback_Thread_Data));
ftd->name = strdup("data2");
#ifdef _WIN32
ftd->base = strdup("c:/windows/Help");
#else
ftd->base = strdup("/usr/lib");
#endif
}
else
{
Feedback_Thread_Data *ftd;
char *str;
i = 0;
{
char buf[32];
snprintf(buf, sizeof(buf), "data%d", i);
ftd = calloc(1, sizeof(Feedback_Thread_Data));
ftd->name = strdup(buf);
ftd->base = strdup(str);
free(str);
i++;
}
}
_thread_end_cb, _thread_cancel_cb, &appdata,
_thread_cancel_cb, &appdata);
_thread_end_cb, _thread_cancel_cb, &appdata,
_print_status();
return 0;
}