Boost logo

Boost Users :

Subject: Re: [Boost-users] Fw: boost::asio
From: imran sheikh (s.imran0508_at_[hidden])
Date: 2014-07-13 22:56:39


hi lars, i done like this. ->create ioservice. ->created work object. ->creating N threads. ->running ioservice.   -> now in while loop, -> in for loop posting 5 times. ->work.reset() ->joinall ->continue while loop. now, problem are, ->posting ioservice 5 times. but in that some threads are same only. so why all are not diff? ->and second time its not executing any threads why? give me one example like this. and suggest please. thanks. thanks, imran On Sunday, 13 July 2014 6:22 PM, Lars Viklund <zao_at_[hidden]> wrote: On Sun, Jul 13, 2014 at 08:11:23PM +0800, imran sheikh wrote: > hi , > > but if i am not using ioservice.reset() in the while loop then second time the threads are not executing properly. > so please give me a strong running solution .i need immediately this one. Hi there, You appear to be missing some knowledge about how the operations on an io_service fits together. When you post a handler to an io_service, it will (eventually) run on any thread that happens to do any of run(), run_one(), poll(), poll_one(). The io_service will be in the running state as long as there exists 'work', operations in progress (like send/recv), or posted handlers in queue. Important here is that if the io_service runs out of things to do, it finishes and returns from the run() functions. The typical lifecycle of an io_service are: == Setup == * prepare and post operations to it; * construct instances of 'work' to artificially keep it alive; * run one or more run()/run_one()/poll()/poll_one() somewhere. == Runtime == * do things with devices, timers, post handlers, etc. == Teardown == * destroy any artifical 'work' objects that you use to keep it running; * stop posting more operations and handlers to it, so it runs out; * optionally wait for it and any worker threads to finish. For the scenario of a thread pool that runs posted handlers; the typical approach is: * make control 'work'; * create N threads, running run(); * post handlers until bored; * destroy control 'work'; * join all N threads. The reset() function shall only be called after the io_service is stopped and you wish to eventually re-start it [1]. It's an error to call reset() while you're run()ing. [1] http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service/reset.html -- Lars Viklund | zao_at_[hidden] _______________________________________________ Boost-users mailing list Boost-users_at_[hidden] http://lists.boost.org/mailman/listinfo.cgi/boost-users



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