Like with ecore_main_loop_thread_safe_call_sync() you can provide a callback to call inline in the mainloop, but this time with ecore_main_loop_thread_safe_call_async() the callback is queued and called asynchronously, without the thread blocking. The mainloop will call this function when it comes around to its synchronisation point. This acts as a "fire and forget" way of having the mainloop do some work for a thread that has finished processing some data and is read to hand it off to the mainloop and the thread wants to march on and do some more work while the main loop deals with "displaying" the results of the previous calculation.
EFL Threading example 4
EFL Threading example 5
EFL Threading example 6
#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 void *
{
double t = 0.0;
for (;;)
{
struct info *inf = malloc(sizeof(struct info));
if (inf)
{
inf->x = 200 + (200 * sin(t));
inf->y = 200 + (200 * cos(t));
(my_thread_mainloop_code, inf);
}
usleep(1000);
t += 0.02;
}
return NULL;
}
static void
my_thread_new(void)
{
pthread_attr_t attr;
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
{
}
EAPI_MAIN int
{
rect = o;
my_thread_new();
return 0;
}
@ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED
quit when the application's last window is closed
Definition: elm_general.h:248
#define EINA_UNUSED
Definition: eina_types.h:339
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
Efl_Canvas_Object Evas_Object
Definition: Evas_Common.h:180
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
void elm_run(void)
Run Elementary's main loop.
Definition: elm_main.c:1362
#define ELM_MAIN()
macro to be used after the elm_main() function
Definition: elm_general.h:528
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:9576
void elm_exit(void)
Ask to exit Elementary's main loop.
Definition: elm_main.c:1378
void evas_object_show(Evas_Object *eo_obj)
Makes the given Evas object visible.
Definition: evas_object_main.c:1814
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:1385
Evas_Object * evas_object_rectangle_add(Evas *e)
Adds a rectangle to the given evas.
Definition: evas_object_rectangle.c:78
EAPI void ecore_main_loop_thread_safe_call_async(Ecore_Cb callback, void *data)
Calls callback asynchronously in the main loop.
Definition: ecore.c:608
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
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
@ ELM_POLICY_QUIT
under which circumstances the application should quit automatically.
Definition: elm_general.h:227