我正在创建一个(c ++)应用程序,它是一个websocket客户端和websocket服务器。为了能够做到这一点,我正在使用库websocketpp。为了使应用程序既是客户端又是服务器,我希望endpoint1.run()
和endpoint2.listen(port)
是多线程的。这是出问题的地方。
通常(单线程)我使用:endpoint.listen(port);
可以使用。
为了使它成为我使用的多线程:
boost::thread t(boost::bind(&server::listen, &endpoint, port));
sleep(1);
cout << "After thread! \n";
t.join();
然而,我收到错误:
main.cpp:116: error: no matching function for call to ‘bind(<unresolved overloaded function type>, websocketpp::server*, uint16_t&)’
server::listen
是一个重载函数,我应该在bind中以不同方式调用它吗?
答案 0 :(得分:4)
看看boost documentation。有一个很好的例子 你需要通过自己来解决歧义。
答案 1 :(得分:0)
对于那些仍然想知道如何实现这一点的人:
void(websocketpp::role::server<websocketpp::server>::*f)(uint16_t,size_t) = &websocketpp::role::server<websocketpp::server>::listen;
boost::thread t(f, &endpoint, port, 1); //No need to use boost::bind here
之后调用t.detach()或endpoint.stop()和t.join()