gen_event例子:terminal_logger

定义三个terminal_logger:
$$ terminal_logger1.erl
-module(terminal_logger1).
-behaviour(gen_event).

-export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]).

init(_Args) ->
  {ok, []}.

handle_event(ErrorMsg, State) ->
  io:format("*** Error1 *** ~p~n", [ErrorMsg]),
  {ok, State}.

handle_call(_Request, _State) ->
  {ok, [], []}.

handle_info(_Info, _State) ->
  {ok, []}.

code_change(_OlvVsn, _State, _Extra) ->
  ok.

terminate(_Args, _State) ->
  ok.

$$ terminal_logger2.erl
-module(terminal_logger2).
-behaviour(gen_event).

-export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]).

init(_Args) ->
  {ok, []}.

handle_event(ErrorMsg, State) ->
  io:format("*** Error2 *** ~p~n", [ErrorMsg]),
  {ok, State}.

handle_call(_Request, _State) ->
  {ok, [], []}.

handle_info(_Info, _State) ->
  {ok, []}.

code_change(_OlvVsn, _State, _Extra) ->
  ok.

terminate(_Args, _State) ->
  ok.

$$ terminal_logger3.erl
-module(terminal_logger3).
-behaviour(gen_event).

-export([init/1, handle_event/2, handle_call/2, handle_info/2, code_change/3, terminate/2]).

init(_Args) ->
  {ok, []}.

handle_event(ErrorMsg, State) ->
  io:format("*** Error3 *** ~p~n", [ErrorMsg]),
  {ok, State}.

handle_call(_Request, _State) ->
  {ok, [], []}.

handle_info(_Info, _State) ->
  {ok, []}.

code_change(_OlvVsn, _State, _Extra) ->
  ok.

terminate(_Args, _State) ->
  ok.


编译:
Eshell> c(terminal_logger1).
Eshell> c(terminal_logger2).
Eshell> c(terminal_logger3).


运行:
D:\erl\code>erl
Eshell V5.6.3  (abort with ^G)
1> gen_event:start_link({local, error_man}).
{ok,<0.31.0>}
2> gen_event:add_handler(error_man, terminal_logger1, []).
ok
3> gen_event:add_handler(error_man, terminal_logger2, []).
ok
4> gen_event:add_handler(error_man, terminal_logger3, []).
ok
5> gen_event:which_handlers(error_man).
[terminal_logger3,terminal_logger2,terminal_logger1]
6> gen_event:notify(error_man, "Hideto").
*** Error3 *** "Hideto"
ok
*** Error2 *** "Hideto"
7> *** Error1 *** "Hideto"
7>

你可能感兴趣的:(C++,c,C#)