diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index ffd57a1a3c..5354a68e06 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/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 diff --git a/legacy/eina/src/lib/eina_sched.c b/legacy/eina/src/lib/eina_sched.c index 85d04ebbad..45fcc0033a 100644 --- a/legacy/eina/src/lib/eina_sched.c +++ b/legacy/eina/src/lib/eina_sched.c @@ -30,6 +30,14 @@ # endif #endif +#ifdef EFL_HAVE_WIN32_THREADS +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# 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, ¶m); } -#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");