Eina: Implement eina_sched_prio_drop() on Windows
authorcaro <caro>
Tue, 24 May 2011 06:29:58 +0000 (06:29 +0000)
committercaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 24 May 2011 06:29:58 +0000 (06:29 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@59637 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/eina_sched.c

index ffd57a1..5354a68 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -85,3 +85,7 @@
 2011-05-18  Cedric Bail
 
        * Fix eina_share_common_init to be called only once.
+
+2011-05-24  Vincent Torri
+
+       * Implement eina_sched_prio_drop() on Windows
index 85d04eb..45fcc00 100644 (file)
 # endif
 #endif
 
+#ifdef EFL_HAVE_WIN32_THREADS
+# ifndef WIN32_LEAN_AND_MEAN
+#  define WIN32_LEAN_AND_MEAN
+# endif
+# include <windows.h>
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
 #include "eina_sched.h"
 #include "eina_log.h"
 
@@ -61,7 +69,7 @@ eina_sched_prio_drop(void)
 
         pthread_setschedparam(pthread_id, pol, &param);
      }
-#ifdef __linux__
+# ifdef __linux__
    else
      {
         errno = 0;
@@ -75,7 +83,23 @@ eina_sched_prio_drop(void)
              setpriority(PRIO_PROCESS, 0, prio);
           }
      }
-#endif
+# endif
+#elif defined EFL_HAVE_WIN32_THREADS
+   HANDLE thread;
+
+   thread = OpenThread(THREAD_SET_INFORMATION,
+                      FALSE,
+                      GetCurrentThreadId());
+   if (!thread)
+     {
+       EINA_LOG_ERR("Can not open current thread");
+       return;
+     }
+
+   if (!SetThreadPriority(thread, THREAD_PRIORITY_BELOW_NORMAL))
+     EINA_LOG_ERR("Can not set thread priority");
+
+   CloseHandle(thread);
 #else
    EINA_LOG_ERR("Eina does not have support for threads enabled"
                 "or it doesn't support setting scheduler priorities");