diff --git a/src/Nazara/Core/TaskScheduler.cpp b/src/Nazara/Core/TaskScheduler.cpp index 12b054f58..6a75f1c14 100644 --- a/src/Nazara/Core/TaskScheduler.cpp +++ b/src/Nazara/Core/TaskScheduler.cpp @@ -131,7 +131,7 @@ namespace Nz std::shuffle(randomWorkerIndices.begin(), randomWorkerIndices.end(), gen); } - do + while (m_running.load(std::memory_order_relaxed)) { // Get a task TaskScheduler::Task* task; @@ -168,7 +168,6 @@ namespace Nz m_notifier.clear(); } } - while (m_running.load(std::memory_order_relaxed)); } TaskScheduler::Task* StealTask() diff --git a/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp b/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp index 772a5a678..a8be81dc0 100644 --- a/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp +++ b/tests/UnitTests/Engine/Core/TaskSchedulerTests.cpp @@ -1,8 +1,9 @@ -#include #include +#include #include #include #include +#include #include SCENARIO("TaskScheduler", "[CORE][TaskScheduler]") @@ -25,21 +26,19 @@ SCENARIO("TaskScheduler", "[CORE][TaskScheduler]") WHEN("We add time-consuming tasks, they are split between workers") { std::atomic_uint count = 0; - - Nz::HighPrecisionClock clock; for (unsigned int i = 0; i < scheduler.GetWorkerCount(); ++i) { scheduler.AddTask([&] { - std::this_thread::sleep_for(std::chrono::milliseconds(100)); + std::minstd_rand gen(Catch::getSeed()); + std::uniform_int_distribution dis(10, 150); + std::this_thread::sleep_for(std::chrono::milliseconds(dis(gen))); count++; }); } scheduler.WaitForTasks(); - Nz::Time elapsedTime = clock.GetElapsedTime(); CHECK(count == scheduler.GetWorkerCount()); - CHECK(elapsedTime < Nz::Time::Milliseconds(std::max(scheduler.GetWorkerCount(), 2u) * 100)); } WHEN("We add a lot of tasks and wait for all of them")