"Cleaning" the message queue
Willem Broekema
willem@REDACTED
Fri Jul 13 18:01:33 CEST 2001
Heh, this looks like a nice way to compensate for my DOH get_tcp/gen_tcp
typo question. ;-)
Vlad Dumitrescu wrote:
> What I'd want is that in case there are several such messages waiting,
> only the latest shall be processed, while the rest shall be dumped.
> (The messages are "virtual clock ticks")
I came up with the following simple solution:
-module(getlatest).
-export([start/0]).
start() ->
loop().
loop() ->
receive
{From, get_latest} ->
From ! get_latest(),
loop()
end.
get_latest() ->
get_latest(queue_was_empty).
get_latest(LastUntilNow) ->
%% if there's no new message in the queue, return 'LastUntilNow'
receive
Newer ->
get_latest(Newer)
after
0 ->
LastUntilNow
end.
And works like:
23> S = spawn_link(getlatest, start, []).
<0.65.0>
24> S ! first.
first
25> S ! second.
second
26> S ! last.
last
27> S ! {self(), get_latest}.
{<0.41.0>,get_latest}
28> flush().
Shell got last
ok
29>
HTH
- Willem
More information about the erlang-questions
mailing list