Boost logo

Boost :

From: Georg Gast (georg_at_[hidden])
Date: 2024-12-30 05:37:39


Hi,
I would use asio for two things:
1. Classic asio operation like rs232 and tcp. They can be processed in the usual asio way.
2. I receive jobs from an external device. The device can only send one job at a time. The processing must be in the order of arrival. This would post function objects to a strand. Each device would have its own strand.

As I understand you and Vinnie that should work as expected.

Thanks

Georg

29.12.2024 16:27:53 Christian Mazakas via Boost <boost_at_[hidden]>:

> On Fri, Dec 27, 2024 at 8:33 PM Georg Gast via Boost <boost_at_[hidden]>
> wrote:
>
>> Hi,
>> If I use a asio::strand and post() there multiple function objects, are
>> they executed in the same order or is the order of execution not specified?
>>
>> I think to use it as a work queue but I need them to be processed in
>> sequence...
>>
>
> Depending on your definition of "processed in sequence", a strand may or
> may not be what you're looking for.
>
> Strands are first-in-first-out but if your function objects are async in
> the Asio sense, you'll run into problems here.
>
> Each item in the strand will run in post() order until either it completes
> or it calls a non-blocking Asio function, which means you can have
> interwoven function objects executing "out of sequence".
>
> Strands are also for the multi-threaded io_contexts, to give safe access to
> I/O objects.
>
> If you need just a plain FIFO work queue, Asio has some thread pool classes
> you can use. If you need to sequence a bunch of async function objects,
> you'll need something different.
>
> - Christian
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk