tizen 2.4 release
[framework/uifw/elementary.git] / src / examples / efl_thread_win32_3.c
1 //Compile with:
2 //gcc -o efl_thread_3 efl_thread_win32_3.c -g `pkg-config --cflags --libs elementary`
3 #include <Elementary.h>
4 #define WIN32_LEAN_AND_MEAN
5 #include <windows.h>
6
7 static Evas_Object *win = NULL;
8 static Evas_Object *rect = NULL;
9
10 struct info
11 {
12    double x, y;
13 };
14
15 static void my_thread_mainloop_code(void *data);
16
17 static HANDLE thread;
18
19 // BEGIN - code running in my custom win32 thread instance
20 //
21 static DWORD WINAPI
22 my_thread_run(LPVOID arg)
23 {
24    double t = 0.0;
25
26    // inside the thread function lets loop forever incrementing a time point
27    for (;;)
28      {
29         struct info *inf = malloc(sizeof(struct info));
30
31         if (inf)
32           {
33              inf->x = 200 + (200 * sin(t));
34              inf->y = 200 + (200 * cos(t));
35              // now call a function in the mainloop and pass it our allocated
36              // data that it will free when it gets it
37              ecore_main_loop_thread_safe_call_async
38                 (my_thread_mainloop_code, inf);
39           }
40         // and sleep and loop
41         usleep(1000);
42         t += 0.02;
43      }
44    return NULL;
45 }
46 //
47 // END - code running in my custom win32 thread instance
48 static void
49 my_thread_new(void)
50 {
51    thread = CreateThread(NULL, 0, my_thread_run, NULL, 0, NULL);
52    if (!thread)
53      {
54         char *str = evil_last_error_get();
55         if (str)
56           {
57              fprintf("thread creation failed: %s\n", str);
58              free(str);
59           }
60      }
61 }
62
63 static void
64 my_thread_mainloop_code(void *data)
65 {
66    struct info *inf = data;
67    evas_object_move(rect, inf->x - 50, inf->y - 50);
68    free(inf);
69 }
70
71 EAPI_MAIN int
72 elm_main(int argc, char **argv)
73 {
74    Evas_Object *o;
75
76    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
77
78    win = elm_win_util_standard_add("efl-thread-3", "EFL Thread 3");
79    elm_win_autodel_set(win, EINA_TRUE);
80
81    o = evas_object_rectangle_add(evas_object_evas_get(win));
82    evas_object_color_set(o, 50, 80, 180, 255);
83    evas_object_resize(o, 100, 100);
84    evas_object_show(o);
85    rect = o;
86
87    // create custom thread to do some "work on the side"
88    my_thread_new();
89
90    evas_object_resize(win, 400, 400);
91    evas_object_show(win);
92
93    elm_run();
94
95    return 0;
96 }
97 ELM_MAIN()