C++ 虚拟ASIO服务回调?
我有一个基于ASIO的对象进行网络通信,我需要做一个小的修复,但它涉及到向ASIO io_服务添加一个虚拟请求和回调 我有一个接口函数,我需要为客户机代码提供支持,但随着我的实现最近的变化,这个接口函数不再起任何作用C++ 虚拟ASIO服务回调?,c++,boost,asynchronous,boost-asio,C++,Boost,Asynchronous,Boost Asio,我有一个基于ASIO的对象进行网络通信,我需要做一个小的修复,但它涉及到向ASIO io_服务添加一个虚拟请求和回调 我有一个接口函数,我需要为客户机代码提供支持,但随着我的实现最近的变化,这个接口函数不再起任何作用 void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported( boost::function< void( int ) > callback ); …但这有点危险,因为客户端将在一个意外的时间获得
void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported(
boost::function< void( int ) > callback );
…但这有点危险,因为客户端将在一个意外的时间获得回调—在调用MyClass::function期间,它不再做任何事情,但必须支持。我想做的是:
void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported(
boost::function< void( int ) > callback )
{
boost::asio::async_write(m_socket_previously_connected,
m_request_buf_previously_filled,
boost::bind( &MyClass::HandleAsyncWriteCompletion,
this,
boost::asio::placeholders::error,
callback ) );
}
void MyClass::HandleAsyncWriteCompletion(
const boost::system::error_code& e,
boost::function< void( int ) > originalCallback )
{
if(!e) // Write operation completed successfully
{
orignalCallback( 0 );
}
else
{
orignalCallback( -1 );
}
}
void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported(
boost::function< void( int ) > callback )
{
// Set the timeout and asynchronously wait
m_zero_timer.expires_from_now(boost::posix_time::seconds(0));
m_zero_timer.async_wait(boost::bind(&MyClass::ZeroTimerExpiry,
this,
boost::asio::placeholders::error,
callback ) );
}
void MyClass::ZeroTimerExpiry( const boost::system::error_code & e,
boost::function< void( int ) > orignalCallback )
{
orignalCallback( 0 );
}
void MyClass::函数不再支持任何内容,但必须支持(
boost::函数回调)
{
//设置超时并异步等待
m_zero_timer.expires_from_now(boost::posix_time::seconds(0));
m_zero_timer.async_wait(boost::bind(&MyClass::ZeroTimerExpiry,
这
boost::asio::占位符::错误,
回调);
}
void MyClass::ZeroTimerExpiry(const boost::system::error_code&e,
boost::函数orignalCallback)
{
原始回缩(0);
}
除了使用零计时器,还有没有更优雅的方法让回调在io_service::run()上运行
除了使用零计时器,还有没有更优雅的方法让回调在io_service::run()上运行
当然可以,给你:
void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported(
boost::function< void( int ) > callback )
{
io.post( boost::bind(callback, 0) );
}
void MyClass::函数不再支持任何内容,但必须支持(
boost::函数回调)
{
io.post(boost::bind(回调,0));
}
如果您没有io\u服务
引用,您可以从m\u zero\u计时器获取它。获取io\u服务()
也许您正在寻找?post()
将确保您的客户端以与此更改之前相同的方式(在相同的线程内)获取回调。
void MyClass::FuncThatNoLongerDoesAnythingButMustBeSupported(
boost::function< void( int ) > callback )
{
io.post( boost::bind(callback, 0) );
}