#ifndef PIP_TESTS_EXECUTOR_H #define PIP_TESTS_EXECUTOR_H #include "piblockingdequeue.h" /** * @brief Thread pools address two different problems: they usually provide improved performance when executing large * numbers of asynchronous tasks, due to reduced per-task invocation overhead, and they provide a means of bounding and * managing the resources, including threads, consumed when executing a collection of tasks. */ class PIThreadPoolExecutor { public: explicit PIThreadPoolExecutor(size_t corePoolSize = 1, PIBlockingDequeue >* taskQueue_ = new PIBlockingDequeue >()); 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 */ void execute(const std::function& runnable); 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. */ void shutdown(); volatile bool isShutdown() const; bool awaitTermination(int timeoutMs); private: volatile bool isShutdown_; PIBlockingDequeue >* taskQueue; PIVector threadPool; }; #endif //PIP_TESTS_EXECUTOR_H