Boost logo

Boost Users :

Subject: Re: [Boost-users] async processing issues
From: SRD (software.research.development_at_[hidden])
Date: 2013-07-03 15:24:02


Had some typos in the previous post, correcting ...

---
boost::asio::io_service service1;
boost::asio::io_service service2;
// dir_monitor callback running in thread 1
void f_handler(const boost::system::error_code &ec, const
boost::asio::dir_monitor_event &ev)
{
    TaskObj tsk = new TaskObj(...);
    // detect event, create task and post functor to thread 2 which handles
    // tasks
    service2.post(boost::bind(&TaskObj::do_it, tsk));
}
int main(...) {
    boost::asio::dir_monitor dm(service1);
    for (/*directory list*/) {
        dm.add_directory(dir);
    }
    dm.async_monitor(f_handler);
    // setup work to prevent exit and before running io_service
    shared_ptr<boost::asio::io_service::work>
        work(new boost::asio::io_service::work(service2));
    // thread to constantly monitor dirs
    boost::thread t1 =
        boost::thread(boost::bind(&boost::asio::io_service::run,
        boost::ref(service1)));
    t1.detach();
    // thread to do tasks as posted by dir_monitor thread and idle if no
tasks exists
    boost::thread t2(boost::bind(&boost::asio::io_service::run,
        boost::ref(service2)));
    t2.detach();
    while (true) {
        // do other stuff or idle, don't want main process to exit.
    }


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net