#pragma once #include "VoxelForgeCore/VoxelForgeCore.h" #include "StandaloneWorkerThread.h" #include #include #include #include #include // This executor belongs to the standalone host. VoxelForgeCore submits indexed work but never // creates or owns worker threads. class FStandaloneCoreScheduler final : public VoxelForgeCore::JobScheduler { public: explicit FStandaloneCoreScheduler(std::size_t helperLimit=12) :HelperLimit(std::clamp(helperLimit,1,12)){} double parallel_for(std::size_t count,std::size_t batchSize,std::size_t workerLimit, void* context,Task task,double* workerActiveSeconds, std::size_t workerActiveCapacity) const override { if(count==0)return 0.0; const std::size_t workers=std::clamp(workerLimit,1, std::min(HelperLimit,std::max(1,count))); const std::size_t grain=std::max(1,batchSize); std::atomic next{0}; std::vector active(workers,0.0); std::vector threads; threads.reserve(workers); for(std::size_t worker=0;worker=count)break; const std::size_t end=first+std::min(grain,count-first); for(std::size_t index=first;index( std::chrono::steady_clock::now()-started).count(); }); for(FStandaloneWorkerThread& thread:threads)thread.join(); double total=0.0; for(std::size_t worker=0;worker