Program Listing for File ThreadTeam.hpp¶
↰ Return to documentation for file (include/uitsl/parallel/ThreadTeam.hpp)
#pragma once
#ifndef UITSL_PARALLEL_THREADTEAM_HPP_INCLUDE
#define UITSL_PARALLEL_THREADTEAM_HPP_INCLUDE
#include <algorithm>
#include <stddef.h>
#include <thread>
#include <utility>
#include <vector>
#include "../polyfill/erase_if.hpp"
#include "_TryJoinableThread.hpp"
namespace uitsl {
class ThreadTeam {
std::vector<internal::TryJoinableThread> workers;
public:
template <typename... Args>
void Add(Args&&... args) {
workers.emplace_back(std::forward<Args>(args)...);
}
void Join() {
std::for_each(
std::begin(workers),
std::end(workers),
[](auto & worker){ worker.Join(); }
);
workers.clear();
}
bool TryJoin() {
std::erase_if(
workers,
[](auto& worker){ return worker.TryJoin(); }
);
return workers.size() == 0;
}
size_t Size() const { return workers.size(); }
};
} // namespace uitsl
#endif // #ifndef UITSL_PARALLEL_THREADTEAM_HPP_INCLUDE