То, как библиотеки C ++ POCO документация показывает, как запустить thread
с использованием thread-pool
, выглядит следующим образом:
#include "Poco/ThreadPool.h"
#include "Poco/Runnable.h"
#include <iostream>
#include <thread>
class Foo : public Poco::Runnable
{
public:
virtual void run()
{
while (true)
{
std::cout << "Hello Foo " << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
};
int main(int argc, char** argv)
{
Foo foo;
Poco::ThreadPool::defaultPool().addCapacity(16);
Poco::ThreadPool::defaultPool().startWithPriority(Poco::Thread::Priority::PRIO_LOW, foo);
Poco::ThreadPool::defaultPool().joinAll();
return 0;
}
Который работает совершенно нормально.
Однако теперь я хотел бы использовать тот же class Foo
и запустить другой thread
(используя тот же thread-pool
) из другого метода, кроме виртуального метода run()
.
Возможно ли это в библиотеках POCO? Если так, как я могу это сделать?
Примерно так: псевдокод:
#include "Poco/ThreadPool.h"
#include "Poco/Runnable.h"
#include <iostream>
#include <thread>
class Foo : public Poco::Runnable
{
public:
virtual void run()
{
// ERROR: How can I launch this thread on the method anotherThread()?
Poco::ThreadPool::defaultPool().startWithPriority(Poco::Thread::Priority::PRIO_LOW, anotherThread);
while (true)
{
std::cout << "Hello Foo " << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
void anotherThread() // This is the new thread!!
{
while (true)
{
std::cout << "Hello anotherThread " << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}
};
int main(int argc, char** argv)
{
Foo foo;
Poco::ThreadPool::defaultPool().addCapacity(16);
Poco::ThreadPool::defaultPool().startWithPriority(Poco::Thread::Priority::PRIO_LOW, foo);
Poco::ThreadPool::defaultPool().joinAll();
return 0;
}