Now when you want to have a thread do some work, send back results to the mainloop and continue running but the mainloop controls when the thread should stop working, you need some extra flags.
#include <Elementary.h>
#include <pthread.h>
struct info
{
double x, y;
};
static void my_thread_mainloop_code(void *data);
static pthread_t thread_id;
static pthread_mutex_t th_lock;
static int th_exit = 0;
static void *
{
double t = 0.0;
for (;;)
{
struct info *inf = malloc(sizeof(struct info));
int do_exit;
if (inf)
{
inf->x = 200 + (200 * sin(t));
inf->y = 200 + (200 * cos(t));
(my_thread_mainloop_code, inf);
}
usleep(1000);
t += 0.02;
pthread_mutex_lock(&th_lock);
do_exit = th_exit;
pthread_mutex_unlock(&th_lock);
if (do_exit) break;
}
return NULL;
}
static void
my_thread_new(void)
{
pthread_attr_t attr;
pthread_mutex_init(&th_lock, NULL);
if (pthread_attr_init(&attr) != 0)
perror("pthread_attr_init");
if (pthread_create(&thread_id, &attr, my_thread_run, NULL) != 0)
perror("pthread_create");
}
static void
my_thread_mainloop_code(void *data)
{
struct info *inf = data;
free(inf);
}
static void
{
pthread_mutex_lock(&th_lock);
th_exit = 1;
pthread_mutex_unlock(&th_lock);
}
static void
{
pthread_mutex_lock(&th_lock);
th_exit = 1;
pthread_mutex_unlock(&th_lock);
}
EAPI_MAIN int
{
rect = o;
my_thread_new();
pthread_mutex_lock(&th_lock);
th_exit = 1;
pthread_mutex_unlock(&th_lock);
return 0;
}
@ EVAS_CALLBACK_MOUSE_DOWN
Mouse Button Down Event.
Definition: Evas_Common.h:422
EAPI void ecore_main_loop_thread_safe_call_async(Ecore_Cb callback, void *data)
Calls callback asynchronously in the main loop.
Definition: ecore.c:612
#define EINA_UNUSED
Used to indicate that a function parameter is purposely unused.
Definition: eina_types.h:339
#define ELM_MAIN()
macro to be used after the elm_main() function
Definition: elm_general.h:556
Eina_Bool elm_policy_set(unsigned int policy, int value)
Set a new policy's value (for a given policy group/identifier).
Definition: elm_main.c:1380
void elm_exit(void)
Ask to exit Elementary's main loop.
Definition: elm_main.c:1373
void elm_run(void)
Run Elementary's main loop.
Definition: elm_main.c:1357
@ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
quit when the application's last window is closed
Definition: elm_general.h:248
@ ELM_POLICY_QUIT
under which circumstances the application should quit automatically.
Definition: elm_general.h:227
Evas_Object * elm_win_util_standard_add(const char *name, const char *title)
Adds a window object with standard setup.
Definition: efl_ui_win.c:9582
Eo Evas
An opaque handle to an Evas canvas.
Definition: Evas_Common.h:163
EVAS_API void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1814
EVAS_API void evas_object_del(Evas_Object *obj)
Marks the given Evas object for deletion (when Evas will free its memory).
Definition: evas_object_main.c:928
EVAS_API void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a)
Sets the general/main color of the given Evas object to the given one.
Definition: evas_object_main.c:2024
EVAS_API void evas_object_event_callback_add(Evas_Object *eo_obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
Add (register) a callback function to a given Evas object event.
Definition: evas_callbacks.c:478
EVAS_API void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
Move the given Evas object to the given location inside its canvas' viewport.
Definition: evas_object_main.c:1171
EVAS_API Evas * evas_object_evas_get(const Eo *eo_obj)
Get the Evas to which this object belongs to.
Definition: evas_object_main.c:2662
Efl_Canvas_Object Evas_Object
An Evas Object handle.
Definition: Evas_Common.h:185
EVAS_API void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
Changes the size of the given Evas object.
Definition: evas_object_main.c:1236
EVAS_API Evas_Object * evas_object_rectangle_add(Evas *e)
Adds a rectangle to the given evas.
Definition: evas_object_rectangle.c:78
EVAS_API void evas_object_smart_callback_add(Evas_Object *eo_obj, const char *event, Evas_Smart_Cb func, const void *data)
Add (register) a callback function to the smart event specified by event on the smart object obj.
Definition: evas_object_smart.c:1040