【发布时间】:2020-06-25 16:39:20
【问题描述】:
尝试以与 boost 文档建议的方式类似的方式使用deadlinetimer: https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/example/timeouts/blocking_tcp_client.cpp
代码: JNI 线程:
HttpClient client(io_service);
client.doAsyncOperation()
io_service.run()
HttpClient:
doAsyncOperation(){
timer_.expires_from_now(boost::posix_time::seconds(10));
mSocket.async_connect( endpoint,
boost::bind(&HttpClient::handle_connect_async, this,
boost::asio::placeholders::error)
}
void HttpClient::check_deadline(){
if (timer_.expires_at() <= deadline_timer::traits_type::now())
{
mSocket.cancel();
}else{
timer_.async_wait(boost::bind(&SchamanHttpClient::check_deadline, this));
}
}
更新: 修复:在单独的线程上运行 io_service
所以,在 JNI 线程内部:
HttpClient client(io_service);
client.doAsyncOperation()
boost::thread t(boost::bind(&boost::asio::io_service::run,&io_service));
io_service.run();
t.join();
HttpClient:
void HttpClient::check_deadline(){
if (timer_.expires_at() <= deadline_timer::traits_type::now())
{
mSocket.cancel();
io_service.stop();
}else{
timer_.async_wait(boost::bind(&SchamanHttpClient::check_deadline, this));
}
【问题讨论】:
标签: boost java-native-interface boost-asio