Rob*_*sov 1 c++ multithreading boost-asio threadpool
例如:当我编写这段代码时,我收到了正确的结果。
boost::asio::thread_pool t(3);
std::vector<int> vec = {10,20,30};
boost::asio::post(t, [&]{ foo(vec[0]);});
boost::asio::post(t, [&]{ foo(vec[1]);});
boost::asio::post(t, [&]{ foo(vec[2]);});
t.join();
但是当我想在 for-cicle 中使用 boost::asio::post 时,我收到错误 Microsoft Visual C++ Runtime Library:“表达式:向量下标超出范围”
boost::asio::thread_pool t(3);
std::vector<int> vec = {10,20,30};
for (int i = 0; i < 3; ++i) {
    boost::asio::post(t, [&]{ foo(vec[i]);});
}
t.join();
我该怎么做才能让我的最后一种方法返回正确的答案?
您正在i通过引用捕获异步使用的 lambda。当t.join();达到时,i是一个悬空引用。
按值捕获它,这样它就不会更改或过期。
boost::asio::post(t, [&,i]{ foo(vec[i]);});