Отправьте в пул потоков переменную-член из родительского класса.C++

Программы на C++. Форум разработчиков
Anonymous
 Отправьте в пул потоков переменную-член из родительского класса.

Сообщение Anonymous »

У меня есть следующий класс:

Код: Выделить всё

class CMyClass
{
public:
void TestThreadPool();

protected:
void MyMethod();

...
protected:
std::unique_ptr m_tp{};
}
и реализация:

Код: Выделить всё

void CMyClass::MyMethod()
{
std::this_thread::sleep_for(std::chrono::seconds(33));
TRACE("CMyClass::MyMethod\n");
}
И вот я хочу протестировать пул потоков:

Код: Выделить всё

void CMyClass::TestThreadPool()
{
m_tp->enqueue_r(&CMyClass::MyMethod, this);
}
Пока все хорошо.
Если у CMyClass будет родительский элемент:

Код: Выделить всё

class CServicePortal
{
public:
void Method1(const int duration) const;
bool Method2(const int duration) const;
int Method3(const int duration) const;
};
и

Код: Выделить всё

class CMyClass: public CServicePortal
...
Как добавить методы CServicePortal в пул потоков?

Код: Выделить всё

void CMyClass::TestThreadPool()
{
m_tp->enqueue_r(&CMyClass::MyMethod, this);         // ok
m_tp->enqueue_r(&CServicePortal::Method1, this);    // error
}
Ошибка гласит: «тип»: не является членом какого-либо прямого или косвенного базового класса «std::_Invoke_traits_nonzero»
P.S. Используемый пул потоков берется отсюда, но может быть использован и из любого другого пула потоков.

Подробнее здесь: https://stackoverflow.com/questions/790 ... rent-class

Вернуться в «C++»