zhangzengfei
2022-01-10 4496b59ab27d569df1da7ef634e02273b3a9618a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-module(glc_run).
 
-export([execute/2]).
 
-ifdef(erlang18).
-define(time_now(), erlang:monotonic_time()).
-define(time_diff(T1, T2), erlang:convert_time_unit(T2 - T1, native, micro_seconds)).
-else.
-define(time_now(), os:timestamp()). 
-define(time_diff(T1, T2), timer:now_diff(T2, T1)). 
-endif.
 
execute(Fun, [Event, Store]) ->
    T1 = ?time_now(),
    case (catch Fun(Event, Store)) of
        {'EXIT', {Reason, _ST}} ->
            T2 = ?time_now(),
            {?time_diff(T1, T2), {error, Reason}};
        {'EXIT', Reason} ->
            T2 = ?time_now(),
            {?time_diff(T1, T2), {error, Reason}};
        Else -> 
            T2 = ?time_now(),
            {?time_diff(T1, T2), Else}
    end.