Skip to content

Instantly share code, notes, and snippets.

@sld
Created April 25, 2012 03:09
Show Gist options
  • Save sld/2485900 to your computer and use it in GitHub Desktop.
Save sld/2485900 to your computer and use it in GitHub Desktop.
Simple erlang process messaging demonstration
-module(lab).
-compile(export_all).
send_message( GetMsg_PID, Message ) ->
GetMsg_PID ! {message, Message},
io:format(lists:concat(["Sending message ", Message, "\n"]), []).
send_message( GetMsg_PID, Message, Queue_PID ) ->
Queue_PID ! {push, Message, "Sending"},
GetMsg_PID ! {message, Message},
io:format(lists:concat(["Sending message ", Message, "\n"]), []).
get_message() ->
receive
{message, Message} ->
timer:sleep(1000),
io:format(lists:concat(["Getting message ", Message, "\n"]), []),
get_message()
end.
queue( Q ) ->
receive
{ push, Element, Label } ->
io:format(lists:concat([ "In Queue now: ", [Element | Q], Label, "\n"]), []),
queue( [Element | Q] )
end.
get_message( Queue_PID ) ->
receive
{message, Message} ->
Queue_PID ! {push, Message, "Got"},
io:format(lists:concat(["Getting message ", Message, "\n"]), []),
get_message(Queue_PID)
end.
start(Message) ->
% GetMsg_PID = spawn( lab, get_message, [] ),
% spawn(lab, send_message, [GetMsg_PID, Message]),
% spawn(lab, send_message, [GetMsg_PID, "1"]),
% spawn(lab, send_message, [GetMsg_PID, "2"]),
% spawn(lab, send_message, [GetMsg_PID, "3"]),
% spawn(lab, send_message, [GetMsg_PID, "4"]),
QueueG_PID = spawn( lab, queue, [[]] ),
QueueS_PID = spawn( lab, queue, [[]] ),
GetMsgQ_PID = spawn( lab, get_message, [QueueG_PID] ),
spawn(lab, send_message, [GetMsgQ_PID, " Privet1 ", QueueS_PID]),
spawn(lab, send_message, [GetMsgQ_PID, " Privet2 ", QueueS_PID]),
spawn(lab, send_message, [GetMsgQ_PID, " Privet3 ", QueueS_PID]).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment