From: Vincent Torri Date: Tue, 20 Jun 2017 05:29:24 +0000 (+0900) Subject: examples/elm: Use POSIX threads on Windows X-Git-Tag: upstream/1.20.0~479 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fb6530ca2ee9d63bef50c985ea91bbf7ba5321c4;p=platform%2Fupstream%2Fefl.git examples/elm: Use POSIX threads on Windows --- diff --git a/src/examples/elementary/Makefile.am b/src/examples/elementary/Makefile.am index 020f707..a5d7e2a 100644 --- a/src/examples/elementary/Makefile.am +++ b/src/examples/elementary/Makefile.am @@ -171,11 +171,7 @@ efl_thread_2.c \ efl_thread_3.c \ efl_thread_4.c \ efl_thread_5.c \ -efl_thread_6.c \ -efl_thread_win32_1.c \ -efl_thread_win32_2.c \ -efl_thread_win32_3.c \ -efl_thread_win32_4.c +efl_thread_6.c if HAVE_CXX11 SRCS += \ @@ -437,17 +433,10 @@ button_cxx_example_00 # bg_cxx_example_01 endif -if HAVE_WINDOWS -efl_thread_1_SOURCES = efl_thread_win32_1.c -efl_thread_2_SOURCES = efl_thread_win32_2.c -efl_thread_3_SOURCES = efl_thread_win32_3.c -efl_thread_4_SOURCES = efl_thread_win32_4.c -else efl_thread_1_SOURCES = efl_thread_1.c efl_thread_2_SOURCES = efl_thread_2.c efl_thread_3_SOURCES = efl_thread_3.c efl_thread_4_SOURCES = efl_thread_4.c -endif if HAVE_CXX11 icon_cxx_example_01_SOURCES = icon_cxx_example_01.cc diff --git a/src/examples/elementary/efl_thread_win32_1.c b/src/examples/elementary/efl_thread_win32_1.c deleted file mode 100644 index e63dcde..0000000 --- a/src/examples/elementary/efl_thread_win32_1.c +++ /dev/null @@ -1,79 +0,0 @@ -//Compile with: -//gcc -o efl_thread_1 efl_thread_win32_1.c -g `pkg-config --cflags --libs elementary` -#include -#define WIN32_LEAN_AND_MEAN -#include - -static Evas_Object *win = NULL; -static Evas_Object *rect = NULL; - -static HANDLE thread; - -// BEGIN - code running in my custom win32 thread instance -// -static DWORD WINAPI -my_thread_run(LPVOID arg) -{ - double t = 0.0; - - for (;;) - { - ecore_thread_main_loop_begin(); // begin critical - { // indented for illustration of "critical" block - Evas_Coord x, y; - - x = 200 + (200 * sin(t)); - y = 200 + (200 * cos(t)); - evas_object_move(rect, x - 50, y - 50); - } - ecore_thread_main_loop_end(); // end critical - usleep(1000); - t += 0.02; - } - return 0; -} -// -// END - code running in my custom win32 thread instance - -static void -my_thread_new(void) -{ - thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL); - if (!thread) - { - char *str = evil_last_error_get(); - if (str) - { - fprintf("thread creation failed: %s\n", str); - free(str); - } - } -} - -EAPI_MAIN int -elm_main(int argc, char **argv) -{ - Evas_Object *o; - - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - - win = elm_win_util_standard_add("efl-thread-1", "EFL Thread 1"); - elm_win_autodel_set(win, EINA_TRUE); - - o = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_color_set(o, 50, 80, 180, 255); - evas_object_resize(o, 100, 100); - evas_object_show(o); - rect = o; - - // create custom thread to do some "work on the side" - my_thread_new(); - - evas_object_resize(win, 400, 400); - evas_object_show(win); - - elm_run(); - - return 0; -} -ELM_MAIN() diff --git a/src/examples/elementary/efl_thread_win32_2.c b/src/examples/elementary/efl_thread_win32_2.c deleted file mode 100644 index a167d6e..0000000 --- a/src/examples/elementary/efl_thread_win32_2.c +++ /dev/null @@ -1,95 +0,0 @@ -//Compile with: -//gcc -o efl_thread_2 efl_thread_win32_2.c -g `pkg-config --cflags --libs elementary` -#include -#define WIN32_LEAN_AND_MEAN -#include - -static Evas_Object *win = NULL; -static Evas_Object *rect = NULL; - -struct info -{ - double x, y; -}; - -static void *my_thread_mainloop_code(void *data); - -static HANDLE thread; - -// BEGIN - code running in my custom win32 thread instance -// -static DWORD WINAPI -my_thread_run(LPVOID arg) -{ - 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)); - ecore_main_loop_thread_safe_call_sync - (my_thread_mainloop_code, inf); - } - // and sleep and loop - usleep(1000); - t += 0.02; - } - return 0; -} -// -// END - code running in my custom win32 thread instance -static void -my_thread_new(void) -{ - thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL); - if (!thread) - { - char *str = evil_last_error_get(); - if (str) - { - fprintf("thread creation failed: %s\n", str); - free(str); - } - } -} - -static void * -my_thread_mainloop_code(void *data) -{ - struct info *inf = data; - evas_object_move(rect, inf->x - 50, inf->y - 50); - free(inf); - return NULL; -} - -EAPI_MAIN int -elm_main(int argc, char **argv) -{ - Evas_Object *o; - - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - - win = elm_win_util_standard_add("efl-thread-2", "EFL Thread 2"); - elm_win_autodel_set(win, EINA_TRUE); - - o = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_color_set(o, 50, 80, 180, 255); - evas_object_resize(o, 100, 100); - evas_object_show(o); - rect = o; - - // create custom thread to do some "work on the side" - my_thread_new(); - - evas_object_resize(win, 400, 400); - evas_object_show(win); - - elm_run(); - - return 0; -} -ELM_MAIN() diff --git a/src/examples/elementary/efl_thread_win32_3.c b/src/examples/elementary/efl_thread_win32_3.c deleted file mode 100644 index 477d69e..0000000 --- a/src/examples/elementary/efl_thread_win32_3.c +++ /dev/null @@ -1,97 +0,0 @@ -//Compile with: -//gcc -o efl_thread_3 efl_thread_win32_3.c -g `pkg-config --cflags --libs elementary` -#include -#define WIN32_LEAN_AND_MEAN -#include - -static Evas_Object *win = NULL; -static Evas_Object *rect = NULL; - -struct info -{ - double x, y; -}; - -static void my_thread_mainloop_code(void *data); - -static HANDLE thread; - -// BEGIN - code running in my custom win32 thread instance -// -static DWORD WINAPI -my_thread_run(LPVOID arg) -{ - double t = 0.0; - - // inside the thread function lets loop forever incrementing a time point - for (;;) - { - struct info *inf = malloc(sizeof(struct info)); - - if (inf) - { - inf->x = 200 + (200 * sin(t)); - inf->y = 200 + (200 * cos(t)); - // now call a function in the mainloop and pass it our allocated - // data that it will free when it gets it - ecore_main_loop_thread_safe_call_async - (my_thread_mainloop_code, inf); - } - // and sleep and loop - usleep(1000); - t += 0.02; - } - return NULL; -} -// -// END - code running in my custom win32 thread instance -static void -my_thread_new(void) -{ - thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL); - if (!thread) - { - char *str = evil_last_error_get(); - if (str) - { - fprintf("thread creation failed: %s\n", str); - free(str); - } - } -} - -static void -my_thread_mainloop_code(void *data) -{ - struct info *inf = data; - evas_object_move(rect, inf->x - 50, inf->y - 50); - free(inf); -} - -EAPI_MAIN int -elm_main(int argc, char **argv) -{ - Evas_Object *o; - - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - - win = elm_win_util_standard_add("efl-thread-3", "EFL Thread 3"); - elm_win_autodel_set(win, EINA_TRUE); - - o = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_color_set(o, 50, 80, 180, 255); - evas_object_resize(o, 100, 100); - evas_object_show(o); - rect = o; - - // create custom thread to do some "work on the side" - my_thread_new(); - - evas_object_resize(win, 400, 400); - evas_object_show(win); - - elm_run(); - - return 0; -} -ELM_MAIN() diff --git a/src/examples/elementary/efl_thread_win32_4.c b/src/examples/elementary/efl_thread_win32_4.c deleted file mode 100644 index 97b1766..0000000 --- a/src/examples/elementary/efl_thread_win32_4.c +++ /dev/null @@ -1,121 +0,0 @@ -//Compile with: -//gcc -o efl_thread_4 efl_thread_win32_4.c -g `pkg-config --cflags --libs elementary` -#include -#define WIN32_LEAN_AND_MEAN -#include - -static Evas_Object *win = NULL; -static Evas_Object *rect = NULL; - -struct info -{ - double x, y; -}; - -static void my_thread_mainloop_code(void *data); - -static HANDLE thread; -static CRITICAL_SECTION lock; -static int th_exit = 0; - -// BEGIN - code running in my custom win32 thread instance -// -static DWORD WINAPI -my_thread_run(LPVOID arg) -{ - double t = 0.0; - - // inside the thread function lets loop forever incrementing a time point - 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)); - // now call a function in the mainloop and pass it our allocated - // data that it will free when it gets it - ecore_main_loop_thread_safe_call_async - (my_thread_mainloop_code, inf); - } - // and sleep and loop - usleep(1000); - t += 0.02; - // in case someone has asked us to cancel - then cancel this loop - // co-operatively (cancelling is co-operative) - EnterCriticalSection(&lock); - do_exit = th_exit; - LeaveCriticalSection(&lock); - if (do_exit) break; - } - DeleteCriticalSection(&lock); - return NULL; -} -// -// END - code running in my custom win32 thread instance - -static void -my_thread_new(void) -{ - InitializeCriticalSection(&lock); - thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL); - if (!thread) - { - char *str = evil_last_error_get(); - if (str) - { - fprintf("thread creation failed: %s\n", str); - free(str); - } - } -} - -static void -my_thread_mainloop_code(void *data) -{ - struct info *inf = data; - evas_object_move(rect, inf->x - 50, inf->y - 50); - free(inf); -} - -// just test cancelling the thread -static void -down(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - EnterCriticalSection(&lock); - th_exit = 1; - LeaveCriticalSection(&lock); -} - -EAPI_MAIN int -elm_main(int argc, char **argv) -{ - Evas_Object *o; - - elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); - - win = elm_win_util_standard_add("efl-thread-4", "EFL Thread 4"); - elm_win_autodel_set(win, EINA_TRUE); - - o = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_color_set(o, 50, 80, 180, 255); - evas_object_resize(o, 100, 100); - evas_object_show(o); - // new in the examples - we have a mouse down on the blue box cancel - // the thread - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, down, NULL); - rect = o; - - // create custom thread to do some "work on the side" - my_thread_new(); - - evas_object_resize(win, 400, 400); - evas_object_show(win); - - elm_run(); - - return 0; -} -ELM_MAIN()