Home > Mobile >  How should I use thread_pool in this case?
How should I use thread_pool in this case?

Time:07-27

for example: when I write this code I recieve right result.

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();

but when i want use boost::asio::post in for-cicle i recieve error Microsoft Visual C Runtime Library: "Expression: vector subscript out of range"

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();

what can i do to make my last way return the correct answer?

CodePudding user response:

You are capturing i by reference for a lambda that is used asynchronously. When t.join(); is reached, i is a dangling reference.

Capture it by value so it doesn't change or expire.

boost::asio::post(t, [&,i]{ foo(vec[i]);});
  • Related