//! \file pithreadpoolexecutor.h //! \ingroup Thread //! \brief //! \~english Thread pool executor //! \~russian Исполнитель пула потоков //! //! \details //! \~english Executes tasks in a pool of worker threads. //! \~russian Выполняет задачи в пуле рабочих потоков. /* PIP - Platform Independent Primitives Stephan Fomenko This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PITHREADPOOLEXECUTOR_H #define PITHREADPOOLEXECUTOR_H #include "piblockingqueue.h" #include "pithread.h" #include //! \~english Thread pool executor for running tasks //! \~russian Исполнитель пула потоков для выполнения задач class PIP_EXPORT PIThreadPoolExecutor { public: //! \~english Constructs executor with core pool size //! \~russian Создает исполнитель с размером ядра пула explicit PIThreadPoolExecutor(int corePoolSize); //! \~english Destroys executor //! \~russian Уничтожает исполнитель virtual ~PIThreadPoolExecutor(); //! \brief Executes the given task sometime in the future. The task execute in an existing pooled thread. If the task //! cannot be submitted for execution, either because this executor has been shutdown or because its capacity has been //! reached. //! //! \param runnable not empty function for thread pool execution //! \~english Execute task in thread pool //! \~russian Выполняет задачу в пуле потоков void execute(const std::function & runnable); //! \~english Stop all threads immediately //! \~russian Немедленно останавливает все потоки void shutdownNow(); //! \brief Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be //! accepted. Invocation has no additional effect if already shut down. This method does not wait for previously //! submitted tasks to complete execution. Use awaitTermination to do that. //! \~english Initiates orderly shutdown //! \~russian Инициирует упорядоченное завершение void shutdown(); //! \~english Returns if executor is shutdown //! \~russian Возвращает остановлен ли исполнитель bool isShutdown() const; //! \~english Wait for termination //! \~russian Ожидает завершения bool awaitTermination(PISystemTime timeout); private: std::atomic_bool isShutdown_; PIBlockingQueue> taskQueue; PIVector threadPool; }; #endif // PITHREADPOOLEXECUTOR_H