Initialize Tizen 2.3
[framework/uifw/elementary.git] / wearable / 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 incrimenting 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, *bg;
75
76    win = elm_win_add(NULL, "efl-thread-3", ELM_WIN_BASIC);
77    elm_win_title_set(win, "EFL Thread 3");
78    elm_win_autodel_set(win, EINA_TRUE);
79    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
80    evas_object_resize(win, 400, 400);
81    evas_object_show(win);
82
83    bg = elm_bg_add(win);
84    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
85    elm_win_resize_object_add(win, bg);
86    evas_object_show(bg);
87
88    o = evas_object_rectangle_add(evas_object_evas_get(win));
89    evas_object_color_set(o, 50, 80, 180, 255);
90    evas_object_resize(o, 100, 100);
91    evas_object_show(o);
92    rect = o;
93
94    // create custom thread to do some "work on the side"
95    my_thread_new();
96
97    elm_run();
98    elm_shutdown();
99
100    return 0;
101 }
102 ELM_MAIN()