Boost logo

Boost Users :

Subject: Re: [Boost-users] [asio] multi-threaded io_service::run produce wrong result
From: leiming (lmforreg_at_[hidden])
Date: 2011-03-28 18:49:12


ÔÚ Tue, 29 Mar 2011 02:40:48 +0800£¬Lars Viklund <zao_at_[hidden]> дµÀ:

> On Mon, Mar 28, 2011 at 08:40:02PM +0800, leiming wrote:
>> Hi, there.
>
> An io_service will consider itself finished when there is no more
> pending tasks to perform.
>
Thank you for your reply!

> That means that if there is sufficient time between the first task and
> the second task being posted, they may return from run() and end their
> threads, resulting in the joins being completed.
I'm also run io_service::run in the main thread after add all jobs but
it still produce a wrong answer.
It will finish all jobs even if the 2 threads ended because the jobs will
run in the main thread after all jobs were added I thought.
I don't know why

>
> If you want to keep an io_service alive while there are no pending
> operations, construct an io_service::work object from the io_service.
>
> That will keep io_service::run() running until all pending work is
> finished (which you will indicate by destroying the work object.
>
I have tried and it works!


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