Мне нужно запустить поток, который вызывает функцию открытого члена класса Foo, находясь внутри публичной функции, принадлежащей классу Bar. Как мне это достичь?Запуск потока от функции-члена в функции члена другого класса
Я попытался следующие (тривиальное):
void Bar::BarFunc()
{
// Do some BarFunc stuff
// Start a thread that needs to do stuff independently of BarFunc
std::thread t(&Foo::FooFunc, FooFunc params,..,.., ???);
t.detach();
return;
}
Это мой первый раз дело с потоками и актуальной проблемой является немного более сложным - BarFunc виртуальная функция государственного класса, с n-конкретные классы, реализующие разные состояния, в которых может существовать мое приложение, следовательно, вопрос. Я не уверен, что поставить в качестве последнего параметра, если угодно. Я посмотрел на this ответ, но не могу определить, какой синтаксис использовать, если какой-либо из них даже применим.
И, наконец, если это плохая практика, я был бы признателен за любые советы по дизайну.
Из-за «Это мой первый раз, когда речь идет о резьбе»: не отсоединяйте нитку! –
@ DieterLücking Как я могу правильно использовать функцию соединения? –
Необходимые параметры зависят от 'Foo :: FooFunc', к которым мы, к сожалению, не привязаны. Я боюсь, что вы, возможно, немного сократили свой пример. Если у вас есть стек разных классов с различными возможными аргументами, вы можете использовать [std :: bind] (http://en.cppreference.com/w/cpp/utility/functional/bind), чтобы предварительно -упаковать функцию с помощью аргументов. – user4581301