Tue, 09 Dec 2003 19:53:02 +0100
On Tue, 2003-12-09 at 17:23, Gordon Tyler wrote:
> I get the impression that this is not within D-BUS' domain. It's an
> application-level requirement which you could probably achieve without
> multi-threading by using a queue-like system:
> 1. You receive message A but you determine that it requires message B to
> be processed first. You push it onto the queue, making a note of its
> dependencies and continue listening for messages.
> 2. You receive message B but you determine that it requires message C to
> be processed first. You also push it onto the queue and continue
> listening for messages.
> 3. You receive message C that has no dependencies. You process it:
> a. You search through the queue in most-recent-to-oldest order,
> looking for a message that depends on the message being processed,
> finding message B.
> b. Having found message B, you make a note in the message that it's
> message C dependency has been satisified.
> c. Since message B has had all its dependencies satisfied, you
> process it as above.
> d. Continue searching for a message which depends on message C.
> Or something along those lines. Some provision would have to be made to
> keep track of situations like message C arriving first.
Yeah, you're right this is the way to do it. I'll try to hack something
together - if I make it generic enough we could include it in D-BUS as I
can imagine a number situations stuff like this is useful.
It was also a question of whether multi-threading at all was possible /
easy to do with D-BUS. I know that it's possible and easy in ACE with
their Reactor stuff and thread-pools for message listeners.