From ab5fe28b4b3ca32454f5dbd6adca8fbe6fe05e46 Mon Sep 17 00:00:00 2001 From: Vincent Torri Date: Fri, 23 Mar 2012 07:23:26 +0000 Subject: [PATCH] Elm examples: add win32 thread examples, remove some whitespaces in the corresponding pthread code, and rework a bit Makefile.am SVN revision: 69580 --- src/examples/Makefile.am | 564 +++++++++++++++++++------------------- src/examples/efl_thread_1.c | 16 +- src/examples/efl_thread_2.c | 16 +- src/examples/efl_thread_3.c | 15 +- src/examples/efl_thread_4.c | 11 +- src/examples/efl_thread_5.c | 18 +- src/examples/efl_thread_6.c | 9 +- src/examples/efl_thread_win32_1.c | 83 ++++++ src/examples/efl_thread_win32_2.c | 99 +++++++ src/examples/efl_thread_win32_3.c | 101 +++++++ src/examples/efl_thread_win32_4.c | 125 +++++++++ 11 files changed, 738 insertions(+), 319 deletions(-) create mode 100644 src/examples/efl_thread_win32_1.c create mode 100644 src/examples/efl_thread_win32_2.c create mode 100644 src/examples/efl_thread_win32_3.c create mode 100644 src/examples/efl_thread_win32_4.c diff --git a/src/examples/Makefile.am b/src/examples/Makefile.am index b4265c8..a618a5c 100644 --- a/src/examples/Makefile.am +++ b/src/examples/Makefile.am @@ -2,15 +2,15 @@ MAINTAINERCLEANFILES = Makefile.in .PHONY: screenshots -examplesdir = $(datadir)/$(PACKAGE)/examples -filesdir = $(datadir)/$(PACKAGE)/examples +examplesdir = $(pkgdatadir)/examples +filesdir = $(pkgdatadir)/examples files_DATA = AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/lib \ -I$(top_builddir)/src/lib \ --DPACKAGE_DATA_DIR="\"$(datadir)/elementary\"" \ +-DPACKAGE_DATA_DIR="\"$(pkgdatadir)\"" \ -DPACKAGE_BIN_DIR=\"$(bindir)\" \ -DPACKAGE_LIB_DIR=\"$(libdir)\" \ @ELEMENTARY_EDBUS_CFLAGS@ \ @@ -21,10 +21,10 @@ AM_CPPFLAGS = \ @ELEMENTARY_CFLAGS@ LDADD = \ - @ELEMENTARY_LIBS@ \ - @ELEMENTARY_ETHUMB_LIBS@ \ - @ELEMENTARY_X_LIBS@ \ - $(top_builddir)/src/lib/libelementary.la +@ELEMENTARY_LIBS@ \ +@ELEMENTARY_ETHUMB_LIBS@ \ +@ELEMENTARY_X_LIBS@ \ +$(top_builddir)/src/lib/libelementary.la EDJE_CC = @edje_cc@ EDJE_FLAGS_VERBOSE_ = @@ -33,102 +33,104 @@ EDJE_FLAGS_VERBOSE_1 = -v EDJE_FLAGS = $(EDJE_FLAGS_$(V)) SRCS = \ - actionslider_example_01.c \ - bubble_example_01.c \ - button_example_00.c \ - button_example_01.c \ - check_example_01.c \ - colorselector_example_01.c \ - frame_example_01.c \ - transit_example_01.c \ - transit_example_02.c \ - transit_example_03.c \ - transit_example_04.c \ - bg_example_01.c \ - bg_example_02.c \ - bg_example_03.c \ - box_example_02.c \ - flip_example_01.c \ - general_funcs_example.c \ - hover_example_01.c \ - hoversel_example_01.c \ - label_example_01.c \ - theme_example_01.c \ - theme_example_02.c \ - calendar_example_01.c \ - calendar_example_02.c \ - calendar_example_03.c \ - calendar_example_04.c \ - calendar_example_05.c \ - calendar_example_06.c \ - datetime_example.c \ - map_example_01.c \ - map_example_02.c \ - map_example_03.c \ - toolbar_example_01.c \ - toolbar_example_02.c \ - toolbar_example_03.c \ - spinner_example.c \ - clock_example.c \ - dayselector_example.c \ - mapbuf_example.c \ - conformant_example_01.c \ - conformant_example_02.c \ - image_example_01.c \ - icon_example_01.c \ - layout_example_01.c \ - layout_example_02.c \ - layout_example_03.c \ - list_example_01.c \ - list_example_02.c \ - list_example_03.c \ - segment_control_example.c \ - flipselector_example.c \ - fileselector_example.c \ - fileselector_button_example.c \ - fileselector_entry_example.c \ - diskselector_example_01.c \ - diskselector_example_02.c \ - index_example_01.c \ - index_example_02.c \ - genlist_example_01.c \ - genlist_example_02.c \ - genlist_example_03.c \ - genlist_example_04.c \ - genlist_example_05.c \ - theme_example.edc \ - layout_example.edc \ - slider_example.c \ - panes_example.c \ - ctxpopup_example_01.c \ - separator_example_01.c \ - radio_example_01.c \ - panel_example_01.c \ - gengrid_example.c \ - entry_example.c \ - slideshow_example.c \ - progressbar_example.c \ - notify_example_01.c \ - photocam_example_01.c \ - popup_example_01.c \ - popup_example_02.c \ - popup_example_03.c \ - inwin_example.c \ - scroller_example_01.c \ - table_example_01.c \ - table_example_02.c \ - menu_example_01.c \ - thumb_example_01.c \ - web_example.c \ - win_example.c \ - efl_thread_1.c \ - efl_thread_2.c \ - efl_thread_3.c \ - efl_thread_4.c \ - efl_thread_5.c \ - efl_thread_6.c - -examples_PROGRAMS = +actionslider_example_01.c \ +bg_example_01.c \ +bg_example_02.c \ +bg_example_03.c \ +box_example_02.c \ +bubble_example_01.c \ +button_example_00.c \ +button_example_01.c \ +calendar_example_01.c \ +calendar_example_02.c \ +calendar_example_03.c \ +calendar_example_04.c \ +calendar_example_05.c \ +calendar_example_06.c \ +check_example_01.c \ +clock_example.c \ +colorselector_example_01.c \ +conformant_example_01.c \ +conformant_example_02.c \ +ctxpopup_example_01.c \ +datetime_example.c \ +dayselector_example.c \ +diskselector_example_01.c \ +diskselector_example_02.c \ +efl_thread_1.c \ +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 \ +entry_example.c \ +fileselector_button_example.c \ +fileselector_entry_example.c \ +fileselector_example.c \ +flip_example_01.c \ +flipselector_example.c \ +frame_example_01.c \ +general_funcs_example.c \ +gengrid_example.c \ +genlist_example_01.c \ +genlist_example_02.c \ +genlist_example_03.c \ +genlist_example_04.c \ +genlist_example_05.c \ +hover_example_01.c \ +hoversel_example_01.c \ +icon_example_01.c \ +image_example_01.c \ +index_example_01.c \ +index_example_02.c \ +inwin_example.c \ +label_example_01.c \ +layout_example.edc \ +layout_example_01.c \ +layout_example_02.c \ +layout_example_03.c \ +list_example_01.c \ +list_example_02.c \ +list_example_03.c \ +map_example_01.c \ +map_example_02.c \ +map_example_03.c \ +mapbuf_example.c \ +menu_example_01.c \ +notify_example_01.c \ +panes_example.c \ +panel_example_01.c \ +photocam_example_01.c \ +popup_example_01.c \ +popup_example_02.c \ +popup_example_03.c \ +progressbar_example.c \ +radio_example_01.c \ +segment_control_example.c \ +separator_example_01.c \ +slider_example.c \ +slideshow_example.c \ +spinner_example.c \ +scroller_example_01.c \ +table_example_01.c \ +table_example_02.c \ +theme_example.edc \ +theme_example_01.c \ +theme_example_02.c \ +thumb_example_01.c \ +toolbar_example_01.c \ +toolbar_example_02.c \ +toolbar_example_03.c \ +transit_example_01.c \ +transit_example_02.c \ +transit_example_03.c \ +transit_example_04.c \ +web_example.c \ +win_example.c .edc.edj: $(EDJE_CC) $(EDJE_FLAGS) $< $@ @@ -146,183 +148,195 @@ files_DATA += \ clean-local: rm -f *.edj -examples_PROGRAMS += \ - actionslider_example_01 \ - bubble_example_01 \ - button_example_00 \ - button_example_01 \ - check_example_01 \ - colorselector_example_01 \ - frame_example_01 \ - transit_example_01 \ - transit_example_02 \ - transit_example_03 \ - transit_example_04 \ - bg_example_01 \ - bg_example_02 \ - bg_example_03 \ - box_example_02 \ - flip_example_01 \ - general_funcs_example \ - hover_example_01 \ - hoversel_example_01 \ - label_example_01 \ - theme_example_01 \ - theme_example_02 \ - calendar_example_01 \ - calendar_example_02 \ - calendar_example_03 \ - calendar_example_04 \ - calendar_example_05 \ - calendar_example_06 \ - datetime_example \ - map_example_01 \ - map_example_02 \ - map_example_03 \ - toolbar_example_01 \ - toolbar_example_02 \ - toolbar_example_03 \ - spinner_example \ - clock_example \ - dayselector_example \ - mapbuf_example \ - conformant_example_01 \ - conformant_example_02 \ - image_example_01 \ - diskselector_example_01 \ - diskselector_example_02 \ - icon_example_01 \ - layout_example_01 \ - layout_example_02 \ - layout_example_03 \ - list_example_01 \ - list_example_02 \ - list_example_03 \ - segment_control_example \ - slider_example \ - panes_example \ - ctxpopup_example_01 \ - flipselector_example \ - fileselector_example \ - fileselector_button_example \ - fileselector_entry_example \ - index_example_01 \ - index_example_02 \ - separator_example_01 \ - radio_example_01 \ - panel_example_01 \ - gengrid_example \ - genlist_example_01 \ - genlist_example_02 \ - genlist_example_03 \ - genlist_example_04 \ - genlist_example_05 \ - entry_example \ - slideshow_example \ - progressbar_example \ - notify_example_01 \ - photocam_example_01 \ - popup_example_01 \ - popup_example_02 \ - popup_example_03 \ - inwin_example \ - scroller_example_01 \ - table_example_01 \ - table_example_02 \ - menu_example_01 \ - thumb_example_01 \ - web_example \ - win_example \ - efl_thread_1 \ - efl_thread_2 \ - efl_thread_3 \ - efl_thread_4 \ - efl_thread_5 \ - efl_thread_6 +examples_PROGRAMS = \ +actionslider_example_01 \ +bg_example_01 \ +bg_example_02 \ +bg_example_03 \ +box_example_02 \ +bubble_example_01 \ +button_example_00 \ +button_example_01 \ +calendar_example_01 \ +calendar_example_02 \ +calendar_example_03 \ +calendar_example_04 \ +calendar_example_05 \ +calendar_example_06 \ +check_example_01 \ +clock_example \ +colorselector_example_01 \ +conformant_example_01 \ +conformant_example_02 \ +ctxpopup_example_01 \ +datetime_example \ +dayselector_example \ +diskselector_example_01 \ +diskselector_example_02 \ +efl_thread_1 \ +efl_thread_2 \ +efl_thread_3 \ +efl_thread_4 \ +efl_thread_5 \ +efl_thread_6 \ +entry_example \ +fileselector_button_example \ +fileselector_entry_example \ +fileselector_example \ +flip_example_01 \ +flipselector_example \ +frame_example_01 \ +general_funcs_example \ +gengrid_example \ +genlist_example_01 \ +genlist_example_02 \ +genlist_example_03 \ +genlist_example_04 \ +genlist_example_05 \ +hover_example_01 \ +hoversel_example_01 \ +icon_example_01 \ +image_example_01 \ +index_example_01 \ +index_example_02 \ +inwin_example \ +label_example_01 \ +layout_example_01 \ +layout_example_02 \ +layout_example_03 \ +list_example_01 \ +list_example_02 \ +list_example_03 \ +map_example_01 \ +map_example_02 \ +map_example_03 \ +mapbuf_example \ +menu_example_01 \ +notify_example_01 \ +panes_example \ +panel_example_01 \ +photocam_example_01 \ +popup_example_01 \ +popup_example_02 \ +popup_example_03 \ +progressbar_example \ +radio_example_01 \ +segment_control_example \ +separator_example_01 \ +slider_example \ +slideshow_example \ +spinner_example \ +scroller_example_01 \ +table_example_01 \ +table_example_02 \ +theme_example_01 \ +theme_example_02 \ +thumb_example_01 \ +toolbar_example_01 \ +toolbar_example_02 \ +toolbar_example_03 \ +transit_example_01 \ +transit_example_02 \ +transit_example_03 \ +transit_example_04 \ +web_example \ +win_example + +if ELEMENTARY_WINDOWS_BUILD +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 # This variable will hold the list of screenshots that will be made # by "make screenshots". Each item in the list is of the form: # :: SCREENSHOTS = \ - actionslider_example_01:actionslider_01.png:0.0 \ - bg_example_02:bg_01.png:0.0 \ - box_example_02:box_example_02.png:1.3 \ - bubble_example_01:bubble_example_01.png:0.0 \ - button_example_00:button_00.png:0.0 \ - button_example_01:button_01.png:0.0 \ - check_example_01:check_example_01.png:0.0 \ - colorselector_example_01:colorselector_example_01.png:0.0 \ - animator_example_01:animator_example_01.png:0.2 \ - animator_example_01:animator_example_02.png:0.5 \ - animator_example_01:animator_example_03.png:0.9 \ - flip_example_01:flip_example_01.png:0.0 \ - frame_example_01:frame_example_01.png:0.0 \ - hover_example_01:hover_example_01.png:0.0 \ - hoversel_example_01:hoversel_example_01.png:0.0 \ - label_example_01:label_example_01.png:0.0 \ - theme_example_01:theme_example_01.png:0.0 \ - conformant_example_01:conformant_example_01.png:0.0 \ - conformant_example_02:conformant_example_02.png:0.0 \ - calendar_example_01:calendar_example_01.png:0.0 \ - calendar_example_02:calendar_example_02.png:0.0 \ - calendar_example_03:calendar_example_03.png:0.0 \ - calendar_example_04:calendar_example_04.png:0.0 \ - calendar_example_05:calendar_example_05.png:0.0 \ - calendar_example_06:calendar_example_06.png:0.0 \ - datetime_example:datetime_example.png:0.0 \ - map_example_01:map_example_01.png:2 \ - map_example_02:map_example_02.png:2.5 \ - map_example_03:map_example_03.png:2 \ - toolbar_example_01:toolbar_example_01.png:0.0 \ - toolbar_example_02:toolbar_example_02.png:1 \ - toolbar_example_03:toolbar_example_03.png:1 \ - spinner_example:spinner_example.png:0.0 \ - clock_example:clock_example.png:0.5 \ - dayselector_example:dayselector_example.png:0.0 \ - mapbuf_example:mapbuf_example.png:0.0 \ - image_example_01:image_example_01.png:0.0 \ - diskselector_example_01:diskselector_example_01.png:0.2 \ - diskselector_example_02:diskselector_example_02.png:0.2 \ - icon_example_01:icon_example_01.png:0.0 \ - layout_example_01:layout_example_01.png:0.0 \ - layout_example_02:layout_example_02.png:0.0 \ - layout_example_03:layout_example_03.png:0.0 \ - list_example_01:list_example_01.png:0.0 \ - list_example_02:list_example_02.png:0.0 \ - list_example_03:list_example_03.png:0.0 \ - segment_control_example:segment_control_example.png:0.0 \ - flipselector_example:flipselector_example.png:0.0 \ - fileselector_example:fileselector_example.png:0.0 \ - index_example_02:index_example_03.png:0.3 \ - slider_example:slider_example.png:0.0 \ - panes_example:panes_example.png:0.0 \ - ctxpopup_example_01:ctxpopup_example_01.png:0.0 \ - separator_example_01:separator_example_01.png:0.0 \ - radio_example_01:radio_example_01.png:0.0 \ - panel_example_01:panel_example_01.png:0.0 \ - gengrid_example:gengrid_example.png:0.0 \ - genlist_example_01:genlist_example_01.png:0.1 \ - genlist_example_02:genlist_example_02.png:0.1 \ - genlist_example_03:genlist_example_03.png:0.1 \ - genlist_example_04:genlist_example_04.png:0.1 \ - genlist_example_05:genlist_example_05.png:0.1 \ - thumb_example_01:thumb_example_01.png:0.5 \ - entry_example:entry_example.png:0.0 \ - progressbar_example:progressbar_example.png:0.0 \ - notify_example_01:notify_example_01.png:0.0 \ - notify_example_01:notify_example_01_a.png:6.0 \ - popup_example_01:popup_example_01.png:1.0 \ - popup_example_01:popup_example_01_a.png:6.0 \ - popup_example_02:popup_example_02.png:0.2 \ - popup_example_03:popup_example_03.png:0.2 \ - slideshow_example:slideshow_example.png:1.0 \ - photocam_example_01:photocam_example_01.png:3 \ - scroller_example_01:scroller_example_01.png:0.0 \ - inwin_example:inwin_example.png:0.0 \ - inwin_example:inwin_example_a.png:0.2 \ - table_example_01:table_example_01.png:0.0 \ - table_example_02:table_example_02.png:0.0 \ - menu_example_01:menu_example_01.png:0.5 +actionslider_example_01:actionslider_01.png:0.0 \ +bg_example_02:bg_01.png:0.0 \ +box_example_02:box_example_02.png:1.3 \ +bubble_example_01:bubble_example_01.png:0.0 \ +button_example_00:button_00.png:0.0 \ +button_example_01:button_01.png:0.0 \ +check_example_01:check_example_01.png:0.0 \ +colorselector_example_01:colorselector_example_01.png:0.0 \ +animator_example_01:animator_example_01.png:0.2 \ +animator_example_01:animator_example_02.png:0.5 \ +animator_example_01:animator_example_03.png:0.9 \ +flip_example_01:flip_example_01.png:0.0 \ +frame_example_01:frame_example_01.png:0.0 \ +hover_example_01:hover_example_01.png:0.0 \ +hoversel_example_01:hoversel_example_01.png:0.0 \ +label_example_01:label_example_01.png:0.0 \ +theme_example_01:theme_example_01.png:0.0 \ +conformant_example_01:conformant_example_01.png:0.0 \ +conformant_example_02:conformant_example_02.png:0.0 \ +calendar_example_01:calendar_example_01.png:0.0 \ +calendar_example_02:calendar_example_02.png:0.0 \ +calendar_example_03:calendar_example_03.png:0.0 \ +calendar_example_04:calendar_example_04.png:0.0 \ +calendar_example_05:calendar_example_05.png:0.0 \ +calendar_example_06:calendar_example_06.png:0.0 \ +datetime_example:datetime_example.png:0.0 \ +map_example_01:map_example_01.png:2 \ +map_example_02:map_example_02.png:2.5 \ +map_example_03:map_example_03.png:2 \ +toolbar_example_01:toolbar_example_01.png:0.0 \ +toolbar_example_02:toolbar_example_02.png:1 \ +toolbar_example_03:toolbar_example_03.png:1 \ +spinner_example:spinner_example.png:0.0 \ +clock_example:clock_example.png:0.5 \ +dayselector_example:dayselector_example.png:0.0 \ +mapbuf_example:mapbuf_example.png:0.0 \ +image_example_01:image_example_01.png:0.0 \ +diskselector_example_01:diskselector_example_01.png:0.2 \ +diskselector_example_02:diskselector_example_02.png:0.2 \ +icon_example_01:icon_example_01.png:0.0 \ +layout_example_01:layout_example_01.png:0.0 \ +layout_example_02:layout_example_02.png:0.0 \ +layout_example_03:layout_example_03.png:0.0 \ +list_example_01:list_example_01.png:0.0 \ +list_example_02:list_example_02.png:0.0 \ +list_example_03:list_example_03.png:0.0 \ +segment_control_example:segment_control_example.png:0.0 \ +flipselector_example:flipselector_example.png:0.0 \ +fileselector_example:fileselector_example.png:0.0 \ +index_example_02:index_example_03.png:0.3 \ +slider_example:slider_example.png:0.0 \ +panes_example:panes_example.png:0.0 \ +ctxpopup_example_01:ctxpopup_example_01.png:0.0 \ +separator_example_01:separator_example_01.png:0.0 \ +radio_example_01:radio_example_01.png:0.0 \ +panel_example_01:panel_example_01.png:0.0 \ +gengrid_example:gengrid_example.png:0.0 \ +genlist_example_01:genlist_example_01.png:0.1 \ +genlist_example_02:genlist_example_02.png:0.1 \ +genlist_example_03:genlist_example_03.png:0.1 \ +genlist_example_04:genlist_example_04.png:0.1 \ +genlist_example_05:genlist_example_05.png:0.1 \ +thumb_example_01:thumb_example_01.png:0.5 \ +entry_example:entry_example.png:0.0 \ +progressbar_example:progressbar_example.png:0.0 \ +notify_example_01:notify_example_01.png:0.0 \ +notify_example_01:notify_example_01_a.png:6.0 \ +popup_example_01:popup_example_01.png:1.0 \ +popup_example_01:popup_example_01_a.png:6.0 \ +popup_example_02:popup_example_02.png:0.2 \ +popup_example_03:popup_example_03.png:0.2 \ +slideshow_example:slideshow_example.png:1.0 \ +photocam_example_01:photocam_example_01.png:3 \ +scroller_example_01:scroller_example_01.png:0.0 \ +inwin_example:inwin_example.png:0.0 \ +inwin_example:inwin_example_a.png:0.2 \ +table_example_01:table_example_01.png:0.0 \ +table_example_02:table_example_02.png:0.0 \ +menu_example_01:menu_example_01.png:0.5 HTML_SS_DIR=$(top_builddir)/doc/html/screenshots LATEX_SS_DIR=$(top_builddir)/doc/latex/screenshots diff --git a/src/examples/efl_thread_1.c b/src/examples/efl_thread_1.c index 48ea3d2..baa67ae 100644 --- a/src/examples/efl_thread_1.c +++ b/src/examples/efl_thread_1.c @@ -14,13 +14,13 @@ static void * my_thread_run(void *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); @@ -38,7 +38,7 @@ 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) @@ -49,28 +49,28 @@ int elm_main(int argc, char **argv) { Evas_Object *o, *bg; - + win = elm_win_add(NULL, "efl-thread-1", ELM_WIN_BASIC); elm_win_title_set(win, "EFL Thread 1"); elm_win_autodel_set(win, EINA_TRUE); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); evas_object_resize(win, 400, 400); evas_object_show(win); - + bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); evas_object_show(bg); - + 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(); - + elm_run(); return 0; } diff --git a/src/examples/efl_thread_2.c b/src/examples/efl_thread_2.c index 1bca6bc..a7c7493 100644 --- a/src/examples/efl_thread_2.c +++ b/src/examples/efl_thread_2.c @@ -25,7 +25,7 @@ my_thread_run(void *arg) for (;;) { struct info *inf = malloc(sizeof(struct info)); - + if (inf) { inf->x = 200 + (200 * sin(t)); @@ -45,7 +45,7 @@ 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) @@ -65,30 +65,30 @@ int elm_main(int argc, char **argv) { Evas_Object *o, *bg; - + win = elm_win_add(NULL, "efl-thread-2", ELM_WIN_BASIC); elm_win_title_set(win, "EFL Thread 2"); elm_win_autodel_set(win, EINA_TRUE); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); evas_object_resize(win, 400, 400); evas_object_show(win); - + bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); evas_object_show(bg); - + 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(); - + elm_run(); return 0; } - + ELM_MAIN() diff --git a/src/examples/efl_thread_3.c b/src/examples/efl_thread_3.c index 299776a..cdaa2ad 100644 --- a/src/examples/efl_thread_3.c +++ b/src/examples/efl_thread_3.c @@ -26,7 +26,7 @@ my_thread_run(void *arg) for (;;) { struct info *inf = malloc(sizeof(struct info)); - + if (inf) { inf->x = 200 + (200 * sin(t)); @@ -48,7 +48,7 @@ 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) @@ -67,31 +67,30 @@ int elm_main(int argc, char **argv) { Evas_Object *o, *bg; - + win = elm_win_add(NULL, "efl-thread-3", ELM_WIN_BASIC); elm_win_title_set(win, "EFL Thread 3"); elm_win_autodel_set(win, EINA_TRUE); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); evas_object_resize(win, 400, 400); evas_object_show(win); - + bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); evas_object_show(bg); - + 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(); - + elm_run(); return 0; } ELM_MAIN() - diff --git a/src/examples/efl_thread_4.c b/src/examples/efl_thread_4.c index ddb2368..eca9c4c 100644 --- a/src/examples/efl_thread_4.c +++ b/src/examples/efl_thread_4.c @@ -29,7 +29,7 @@ my_thread_run(void *arg) { struct info *inf = malloc(sizeof(struct info)); int do_exit; - + if (inf) { inf->x = 200 + (200 * sin(t)); @@ -87,14 +87,14 @@ int elm_main(int argc, char **argv) { Evas_Object *o, *bg; - + win = elm_win_add(NULL, "efl-thread-4", ELM_WIN_BASIC); elm_win_title_set(win, "EFL Thread 4"); elm_win_autodel_set(win, EINA_TRUE); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); evas_object_resize(win, 400, 400); evas_object_show(win); - + bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); @@ -108,13 +108,12 @@ elm_main(int argc, char **argv) // 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(); - + elm_run(); return 0; } ELM_MAIN() - diff --git a/src/examples/efl_thread_5.c b/src/examples/efl_thread_5.c index 4f17ef5..8e64dd2 100644 --- a/src/examples/efl_thread_5.c +++ b/src/examples/efl_thread_5.c @@ -12,18 +12,18 @@ struct info double x, y; }; -// BEGIN - code running in my custom pthread instance +// BEGIN - code running in my custom thread instance // static void th_do(void *data, Ecore_Thread *th) { double t = 0.0; - + // inside our "do" function for the ecore thread, lets do the real work for (;;) { struct info *inf = malloc(sizeof(struct info)); - + if (inf) { inf->x = 200 + (200 * sin(t)); @@ -41,7 +41,7 @@ th_do(void *data, Ecore_Thread *th) } } // -// END - code running in my custom pthread instance +// END - code running in my custom thread instance static void // when mainloop gets feedback from worker th_feedback(void *data, Ecore_Thread *th, void *msg) @@ -67,26 +67,26 @@ int elm_main(int argc, char **argv) { Evas_Object *o, *bg; - + win = elm_win_add(NULL, "efl-thread-5", ELM_WIN_BASIC); elm_win_title_set(win, "EFL Thread 5"); elm_win_autodel_set(win, EINA_TRUE); elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); evas_object_resize(win, 400, 400); evas_object_show(win); - + bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); evas_object_show(bg); - + 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); evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, down, NULL); rect = o; - + // explicitly create ecore thread to do some "work on the side" and pass // in NULL as data ptr to callbacks and true at the end means to actually // make a new thread and not use the thread pool (there is a thread pool @@ -94,7 +94,7 @@ elm_main(int argc, char **argv) // overload the cpu's with more work than you actually have processing // units *IF* your threads do actually spend their time doing actual // heavy computation) - th = ecore_thread_feedback_run(th_do, th_feedback, th_end, th_cancel, + th = ecore_thread_feedback_run(th_do, th_feedback, th_end, th_cancel, NULL, EINA_TRUE); elm_run(); return 0; diff --git a/src/examples/efl_thread_6.c b/src/examples/efl_thread_6.c index 2d47fb2..6f40862 100644 --- a/src/examples/efl_thread_6.c +++ b/src/examples/efl_thread_6.c @@ -11,7 +11,7 @@ struct info int *pix; }; -// BEGIN - code running in my custom pthread instance +// BEGIN - code running in my custom thread instance // static void mandel(int *pix, int w, int h) @@ -48,12 +48,12 @@ mandel(int *pix, int w, int h) } val = (((x * x) + (y * y)) * 2.55) / 100.0; if (val > 255) val = 255; - if (iteration >= 99999) + if (iteration >= 99999) { rr = (r * val) / 255; gg = (g * val) / 255; bb = (b * val) / 255; - pix[(hy * w) + hx] = + pix[(hy * w) + hx] = (val << 24) | (rr << 16) | (gg << 8) | (bb); } else @@ -71,7 +71,7 @@ th_do(void *data, Ecore_Thread *th) mandel(inf->pix, 256, 256); } // -// END - code running in my custom pthread instance +// END - code running in my custom thread instance static void // thread job finished - collect results and put in img obj th_end(void *data, Ecore_Thread *th) @@ -165,4 +165,3 @@ elm_main(int argc, char **argv) } ELM_MAIN() - diff --git a/src/examples/efl_thread_win32_1.c b/src/examples/efl_thread_win32_1.c new file mode 100644 index 0000000..75d8465 --- /dev/null +++ b/src/examples/efl_thread_win32_1.c @@ -0,0 +1,83 @@ +//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); + } + } +} + +int +elm_main(int argc, char **argv) +{ + Evas_Object *o, *bg; + + win = elm_win_add(NULL, "efl-thread-1", ELM_WIN_BASIC); + elm_win_title_set(win, "EFL Thread 1"); + elm_win_autodel_set(win, EINA_TRUE); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + 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(); + + elm_run(); + return 0; +} + +ELM_MAIN() diff --git a/src/examples/efl_thread_win32_2.c b/src/examples/efl_thread_win32_2.c new file mode 100644 index 0000000..a84c242 --- /dev/null +++ b/src/examples/efl_thread_win32_2.c @@ -0,0 +1,99 @@ +//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; +} + +int +elm_main(int argc, char **argv) +{ + Evas_Object *o, *bg; + + win = elm_win_add(NULL, "efl-thread-2", ELM_WIN_BASIC); + elm_win_title_set(win, "EFL Thread 2"); + elm_win_autodel_set(win, EINA_TRUE); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + 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(); + + elm_run(); + return 0; +} + +ELM_MAIN() diff --git a/src/examples/efl_thread_win32_3.c b/src/examples/efl_thread_win32_3.c new file mode 100644 index 0000000..bda2405 --- /dev/null +++ b/src/examples/efl_thread_win32_3.c @@ -0,0 +1,101 @@ +//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 incrimenting 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); +} + +int +elm_main(int argc, char **argv) +{ + Evas_Object *o, *bg; + + win = elm_win_add(NULL, "efl-thread-3", ELM_WIN_BASIC); + elm_win_title_set(win, "EFL Thread 3"); + elm_win_autodel_set(win, EINA_TRUE); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + 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(); + + elm_run(); + return 0; +} + +ELM_MAIN() diff --git a/src/examples/efl_thread_win32_4.c b/src/examples/efl_thread_win32_4.c new file mode 100644 index 0000000..4b1171b --- /dev/null +++ b/src/examples/efl_thread_win32_4.c @@ -0,0 +1,125 @@ +//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 incrimenting 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); +} + +int +elm_main(int argc, char **argv) +{ + Evas_Object *o, *bg; + + win = elm_win_add(NULL, "efl-thread-4", ELM_WIN_BASIC); + elm_win_title_set(win, "EFL Thread 4"); + elm_win_autodel_set(win, EINA_TRUE); + elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + evas_object_resize(win, 400, 400); + evas_object_show(win); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + 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(); + + elm_run(); + return 0; +} + +ELM_MAIN() -- 2.7.4