adding futures
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
using namespace daggy;
|
using namespace daggy;
|
||||||
|
|
||||||
ThreadPool::ThreadPool(size_t nWorkers) {
|
ThreadPool::ThreadPool(size_t nWorkers) {
|
||||||
|
shutdown_ = false;
|
||||||
|
std::lock_guard<std::mutex> lk(guard_);
|
||||||
for (size_t i = 0; i < nWorkers; ++i) {
|
for (size_t i = 0; i < nWorkers; ++i) {
|
||||||
workers_.emplace_back([&]() {
|
workers_.emplace_back([&]() {
|
||||||
while (true) {
|
while (true) {
|
||||||
@@ -36,9 +38,11 @@ void ThreadPool::shutdown() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::future<void> ThreadPool::addTask(std::function<void()> fn) {
|
std::future<void> ThreadPool::addTask(std::function<void()> fn) {
|
||||||
|
std::packaged_task<void()> task(fn);
|
||||||
|
std::future<void> result = task.get_future();
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lk(guard_);
|
std::unique_lock<std::mutex> lk(guard_);
|
||||||
taskQueue_.push_back(fn);
|
taskQueue_.push_back(std::move(task));
|
||||||
}
|
}
|
||||||
cv_.notify_one();
|
cv_.notify_one();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user