39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
// This file is part of Eigen, a lightweight C++ template library
|
|
// for linear algebra.
|
|
//
|
|
// Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla
|
|
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
// with this file, You can obtain one at the mozilla.org home page
|
|
|
|
#ifndef EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H
|
|
#define EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H
|
|
|
|
namespace Eigen {
|
|
|
|
struct StlThreadEnvironment {
|
|
struct Task {
|
|
std::function<void()> f;
|
|
};
|
|
|
|
// EnvThread constructor must start the thread,
|
|
// destructor must join the thread.
|
|
class EnvThread {
|
|
public:
|
|
EnvThread(std::function<void()> f) : thr_(std::move(f)) {}
|
|
~EnvThread() { thr_.join(); }
|
|
|
|
private:
|
|
std::thread thr_;
|
|
};
|
|
|
|
EnvThread* CreateThread(std::function<void()> f) { return new EnvThread(std::move(f)); }
|
|
Task CreateTask(std::function<void()> f) { return Task{std::move(f)}; }
|
|
void ExecuteTask(const Task& t) { t.f(); }
|
|
};
|
|
|
|
} // namespace Eigen
|
|
|
|
#endif // EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H
|