【发布时间】:2012-04-01 19:53:14
【问题描述】:
我使用以下代码:
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() 时遇到访问冲突。
我在 group.run() 中复制 workData 的原因是因为我想按值捕获 workData 以便当 group.run() lambda 执行时它具有调用 queue_task() 时的状态副本.我希望 workData.Callback() 将在在线传递的对象实例上执行:
data.Callback = std::bind(&ResultProcessor::Handler, resProc, std::placeholders::_1);
编辑:调用崩溃线时,上面的 resProc 是活动的(未销毁)
【问题讨论】: