Управляет набором многократно используемых рабочих потоков для параллельного выполнения задач, вместо создания нового потока для каждой задачи.
More...
|
|
template<typename M> |
| static bool | sync (AbstractThread *_t, M m) |
| |
|
template<typename M> |
| static bool | async (AbstractThread *_t, M m) |
| |
|
template<typename M> |
| static bool | async (M m) |
| |
|
template<typename M, typename R, typename T = std::invoke_result<M>::type> |
| static std::enable_if< std::is_void< T >::value, bool >::type | async (AbstractThread *thread, M method, R result) |
| |
|
template<typename M, typename R, typename T = std::invoke_result<M>::type> |
| static std::enable_if<!std::is_void< T >::value, bool >::type | async (AbstractThread *thread, M method, R result) |
| |
|
template<typename M, typename R> |
| static bool | async (M m, R r) |
| |
|
static ThreadPool * | instance () |
| |
|
static std::vector< AbstractThreadPool * > | pools () |
| |
Управляет набором многократно используемых рабочих потоков для параллельного выполнения задач, вместо создания нового потока для каждой задачи.
Благодаря постановке задач в очередь и повторному использованию потоков, повышается производительность системы, ограничивается использование ресурсов и снижаются накладные расходы на создание/уничтожение потоков.
#include <AsyncFw/MainThread>
#include <AsyncFw/ThreadPool>
#include <AsyncFw/Log>
public:
using AsyncFw::ThreadPool::ThreadPool;
std::string text() { return "Pool"; }
};
int main(int argc, char *argv[]) {
AsyncFw::LogStream::setTimeFormat("%Y-%m-%d %H:%M:%S", true);
Pool *threadPool = AsyncFw::Instance<AsyncFw::ThreadPool>::create<Pool>("ExampeThreadPool");
logInfo() << threadPool->text();
_lt->
invokeMethod([]() { AsyncFw::Instance<AsyncFw::Log>::create(); },
true);
AsyncFw::ThreadPool::sync(_t, []() {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
logInfo() <<
"sync run in thread" << ct->
name() << ct->
id();
});
AsyncFw::ThreadPool::async([]() {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
logInfo() <<
"async run in thread" << ct->
name() << ct->
id();
});
AsyncFw::ThreadPool::async(
[]() {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
logInfo() <<
"async run in thread" << ct->
name() << ct->
id();
},
[]() {
logNotice() <<
"result without value, run in thread" << ct->
name() << ct->
id();
});
AsyncFw::ThreadPool::async(
[]() {
std::this_thread::sleep_for(std::chrono::milliseconds(150));
logInfo() <<
"async run in thread" << ct->
name() << ct->
id();
return 1;
},
[](int r) {
logNotice() <<
"result:" << r <<
"run in thread" << ct->
name() << ct->
id();
AsyncFw::MainThread::exit(0);
});
AsyncFw::AbstractThreadPool::Thread *_t1 = AsyncFw::ThreadPool::instance()->createThread("DestroyFromThreadExample");
logNotice() << "Start Applicaiton";
int ret = AsyncFw::MainThread::exec();
logNotice() << "End Applicaiton" << ret;
return ret;
}