aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/examples/efl_thread_win32_2.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/elementary/src/examples/efl_thread_win32_2.c')
-rw-r--r--libraries/elementary/src/examples/efl_thread_win32_2.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/libraries/elementary/src/examples/efl_thread_win32_2.c b/libraries/elementary/src/examples/efl_thread_win32_2.c
new file mode 100644
index 0000000..d1cad15
--- /dev/null
+++ b/libraries/elementary/src/examples/efl_thread_win32_2.c
@@ -0,0 +1,100 @@
1//Compile with:
2//gcc -o efl_thread_2 efl_thread_win32_2.c -g `pkg-config --cflags --libs elementary`
3#include <Elementary.h>
4#define WIN32_LEAN_AND_MEAN
5#include <windows.h>
6
7static Evas_Object *win = NULL;
8static Evas_Object *rect = NULL;
9
10struct info
11{
12 double x, y;
13};
14
15static void *my_thread_mainloop_code(void *data);
16
17static HANDLE thread;
18
19// BEGIN - code running in my custom win32 thread instance
20//
21static DWORD WINAPI
22my_thread_run(LPVOID arg)
23{
24 double t = 0.0;
25
26 for (;;)
27 {
28 struct info *inf = malloc(sizeof(struct info));
29
30 if (inf)
31 {
32 inf->x = 200 + (200 * sin(t));
33 inf->y = 200 + (200 * cos(t));
34 ecore_main_loop_thread_safe_call_sync
35 (my_thread_mainloop_code, inf);
36 }
37 // and sleep and loop
38 usleep(1000);
39 t += 0.02;
40 }
41 return 0;
42}
43//
44// END - code running in my custom win32 thread instance
45static void
46my_thread_new(void)
47{
48 thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL);
49 if (!thread)
50 {
51 char *str = evil_last_error_get();
52 if (str)
53 {
54 fprintf("thread creation failed: %s\n", str);
55 free(str);
56 }
57 }
58}
59
60static void *
61my_thread_mainloop_code(void *data)
62{
63 struct info *inf = data;
64 evas_object_move(rect, inf->x - 50, inf->y - 50);
65 free(inf);
66 return NULL;
67}
68
69EAPI_MAIN int
70elm_main(int argc, char **argv)
71{
72 Evas_Object *o, *bg;
73
74 win = elm_win_add(NULL, "efl-thread-2", ELM_WIN_BASIC);
75 elm_win_title_set(win, "EFL Thread 2");
76 elm_win_autodel_set(win, EINA_TRUE);
77 elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
78 evas_object_resize(win, 400, 400);
79 evas_object_show(win);
80
81 bg = elm_bg_add(win);
82 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
83 elm_win_resize_object_add(win, bg);
84 evas_object_show(bg);
85
86 o = evas_object_rectangle_add(evas_object_evas_get(win));
87 evas_object_color_set(o, 50, 80, 180, 255);
88 evas_object_resize(o, 100, 100);
89 evas_object_show(o);
90 rect = o;
91
92 // create custom thread to do some "work on the side"
93 my_thread_new();
94
95 elm_run();
96 elm_shutdown();
97
98 return 0;
99}
100ELM_MAIN()