作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在多个线程中使用 asio::io_context。
#include <iostream>
#include <vector>
#include <asio.hpp>
#include <thread>
#include <future>
#include <functional>
int main()
{
asio::io_context ctx;
std::vector<std::future<asio::io_context::count_type>> tasks;
for(int i = 0; i < 3; ++i)
{
tasks.push_back(std::async(std::launch::async, std::bind(&asio::io_context::run, &ctx));
}
for(auto &task: tasks){tasks.get();}
return 0;
}
但是,我遇到了编译错误
asio_blah.cpp: In function ‘int main()’:
asio_blah.cpp:101:94: error: no matching function for call to ‘bind(<unresolved overloaded function type>, asio::io_context*)’
tasks.push_back(std::async(std::launch::async, std::bind(&asio::io_context::run, &ctx));
不确定为什么编译器无法识别成员函数指针(我相信成员函数类型是 asio::io_context::count_type (asio::io_context*)()
和函数签名应该对编译器可见,因为包含 asio.hpp)并报告错误 unresolved overloaded function type
。
有什么修复错误的建议吗?
最佳答案
你可以像这样使用 lambda:
#include <iostream>
#include <vector>
#include <boost/asio.hpp>
#include <thread>
#include <future>
#include <functional>
using namespace boost;
int main()
{
asio::io_context ctx;
std::vector<std::future<asio::io_context::count_type>> tasks;
for(int i = 0; i < 3; ++i)
{
tasks.push_back(std::async(std::launch::async, [&ctx]() {
return ctx.run();
}));
}
for(auto &task: tasks){task.get();}
return 0;
}
编辑:
正如 Miles Budnek 所说的那样, io_context::run 有多个重载。如果不通过强制转换强制进行重载解析,则无法获取指向它的指针。
如果您真的想使用 std::bind
,请进行转换。
我的看法和其他人一样。去 LAMBDA!!!
关于关于在不同线程中运行 io_context 的 C++ 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53952914/
我是一名优秀的程序员,十分优秀!