From 6f495c654a6e405bb5866130529741a6f330f36d Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 6 Dec 2012 01:01:26 +0100 Subject: [PATCH] Added TaskScheduler::GetWorkerCount() Former-commit-id: db4bf747441a13f2d824410aa5be264b300e95d4 --- include/Nazara/Core/TaskScheduler.hpp | 1 + src/Nazara/Core/TaskScheduler.cpp | 55 +++++++++++++++++---------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/include/Nazara/Core/TaskScheduler.hpp b/include/Nazara/Core/TaskScheduler.hpp index 5f7c80537..3eb017636 100644 --- a/include/Nazara/Core/TaskScheduler.hpp +++ b/include/Nazara/Core/TaskScheduler.hpp @@ -16,6 +16,7 @@ class NAZARA_API NzTaskScheduler template static void AddTask(F function); template static void AddTask(F function, Args... args); template static void AddTask(void (C::*function)(), C* object); + static unsigned int GetWorkerCount(); static bool Initialize(); static void Uninitialize(); static void WaitForTasks(); diff --git a/src/Nazara/Core/TaskScheduler.cpp b/src/Nazara/Core/TaskScheduler.cpp index 44e5ca9b8..27dfccd49 100644 --- a/src/Nazara/Core/TaskScheduler.cpp +++ b/src/Nazara/Core/TaskScheduler.cpp @@ -54,7 +54,7 @@ namespace s_impl->waiterConditionVariable.SignalAll(); s_impl->waiterConditionVariableMutex.Unlock(); - // Dans le cas contraire, nous attendons qu'une nouvelle tâche arrive + // Nous attendons qu'une nouvelle tâche arrive s_impl->workerConditionVariableMutex.Lock(); s_impl->workerConditionVariable.Wait(&s_impl->workerConditionVariableMutex); s_impl->workerConditionVariableMutex.Unlock(); @@ -64,6 +64,19 @@ namespace } } +unsigned int NzTaskScheduler::GetWorkerCount() +{ + #ifdef NAZARA_CORE_SAFE + if (!s_impl) + { + NazaraError("Task scheduler is not initialized"); + return 0; + } + #endif + + return s_impl->workers.size(); +} + bool NzTaskScheduler::Initialize() { if (s_impl) @@ -101,26 +114,6 @@ void NzTaskScheduler::Uninitialize() } } -void NzTaskScheduler::AddTaskFunctor(NzFunctor* taskFunctor) -{ - #ifdef NAZARA_CORE_SAFE - if (!s_impl) - { - NazaraError("Task scheduler is not initialized"); - return; - } - #endif - - { - NzLockGuard lock(s_impl->taskMutex); - s_impl->tasks.push(taskFunctor); - } - - s_impl->workerConditionVariableMutex.Lock(); - s_impl->workerConditionVariable.Signal(); - s_impl->workerConditionVariableMutex.Unlock(); -} - void NzTaskScheduler::WaitForTasks() { #ifdef NAZARA_CORE_SAFE @@ -146,3 +139,23 @@ void NzTaskScheduler::WaitForTasks() s_impl->waiterConditionVariable.Wait(&s_impl->waiterConditionVariableMutex); s_impl->waiterConditionVariableMutex.Unlock(); } + +void NzTaskScheduler::AddTaskFunctor(NzFunctor* taskFunctor) +{ + #ifdef NAZARA_CORE_SAFE + if (!s_impl) + { + NazaraError("Task scheduler is not initialized"); + return; + } + #endif + + { + NzLockGuard lock(s_impl->taskMutex); + s_impl->tasks.push(taskFunctor); + } + + s_impl->workerConditionVariableMutex.Lock(); + s_impl->workerConditionVariable.Signal(); + s_impl->workerConditionVariableMutex.Unlock(); +}