Я использую следующий код:
struct WorkData
{
std::string name;
std::function<void(std::string)> Callback;
WorkData(){};
WorkData(const WorkData& other)
{
name = other.name;
Callback = std::ref(other.Callback);
}
};
WorkData data; // this is the data to pass to queue_task() function bellow
data.Callback = std::bind(&ResultProcessor::Handler, resProc, std::placeholders::_1);
template <typename Functor>
void queue_task(Functor& fn, WorkData& workData )
{
group.run([&fn, workData](){
workData.Callback("resultComming"); // runtime ERROR- access violation
});
}
Функции очереди queue_task работают асинхронно в другом потоке (вызывая group.run (lambda) сверху).Проблема, с которой я сталкиваюсь, заключается в том, что при попытке вызвать workData.Callback (). Я получаю нарушение прав доступа.workData по значению, чтобы при выполнении лямбды group.run () у него была копия состояния при вызове queue_task ().Я ожидаю, что workData.Callback () будет выполняться на экземпляре объекта, переданного в строке:
data.Callback = std::bind(&ResultProcessor::Handler, resProc, std::placeholders::_1);
РЕДАКТИРОВАТЬ: resProc сверху жива (не уничтожена), когда строка аварии называется