最近用asio, 好不容易把boost一个tcp server的例子改成了不用boost,只用C++11。
其中的改动有
boost::bind -> std::bind, _1 -> std::placeholders::_1, boost::asio::xxx ->
asio::xxx,
boost::system::error_code -> asio::error_code, high_resolution_timer.
expires_at(std::chrono::high_resolution_clock::time_point::max());
主要问题是网上大部分的例子都是用boost,而编译器去年才全部支持C++11。改动的地
方也不知道对不对,只知道语法对了。
最后,生成一个例子程序来测试能不能把server停了,退出程序,这个退出的功能需要
用一个线程,3秒后呼叫io_service.stop(); 所以线程如下
void asyncStop(Server& server) {
using namespace std::literals;
std::this_thread::sleep_for(2s);
std::cout << "before" << std::endl;
server.quit();
std::cout << "after"<< std::endl;
}
然后main里面
Server s(io_service, listen_endpoint);
std::thread t1(&asyncStop, s);告诉我错误在tuple第75行。这哪找去,最后发现要
这样写
std::thread t1(&asyncStop, std::ref(s));
学了20年C++,现在终于成了初学者。用的编译器是VS2015。关于最后一个错误,它能
否告诉我错在我的std::thread t1(&asyncStop, s);?