0

我正在使用 boost::asio 编写异步文件监控程序,基于项目:https ://github.com/kvikas/file-monitor-service/tree/master/inotify

该项目使用 boost::asio::posix::stream_descriptor 异步读取 inotify_init1(IN_NONBLOCK) 返回的文件描述符

不幸的是,当我重写这个项目时,我的程序中stream_descriptor的方法async_read_some只调用了我的完成处理程序几次(包括事件:OPEN,ACCESS,MODIFY),用于监视文件的第一次更改。

下次我更改监控的文件时,会再次调用 async_monitor 方法,但不再调用完成处理程序。

我检查了方法 aync_read_some 中传递的所有参数:处理程序没问题,来自 initify_init() 的描述仍然打开。

你能帮我解释一下为什么不再调用我的完成处理程序吗???或者提供一些为什么方法 async_read_some 不成功的原因!

我的代码如下:

template<typename Monitor_Handler>
void async_monitor(Monitor_Handler handler) {
    input_->async_read_some(boost::asio::buffer(buffer_),
            boost::bind(&dir_monitor_impl::handle_monitor<Monitor_Handler>,
                    shared_from_this(), boost::asio::placeholders::error,
                    boost::asio::placeholders::bytes_transferred, handler));
}


template<typename Monitor_Handler>
void handle_monitor(const boost::system::error_code &ec,
        std::size_t bytes_transferred, Monitor_Handler handler) {
    std::cout<<"Handle_monitor called"<<std::endl;
    if (!ec) {
        //process buffer
        async_monitor(handler);//async_monitor again
    }else{
        std::cout<<"Error at Handle_monitor"<<std::endl;
    }
}
4

0 回答 0