动态加载代码erlang

本文介绍了Erlang中动态加载代码的概念,通过创建进程A并远程调用来实现。以event_handler作为服务器,motor_controller作为回调模块,通过发送不同消息来执行不同功能。动态加载代码时,可以通过改变接收到的消息类型,更新执行的函数,从而实现代码的动态更新。此技术能够实现强大的功能,例如在不重启进程的情况下更改模块的行为。
摘要由CSDN通过智能技术生成

       动态加载代码,个人理解就是另外开一条进程A,初始化的时候,远程调用,发送一个函数f1发送过去,然后一直保持receive ,阻塞状状态。

        举例说明

 event_handler 为事件处理,可以理解为服务器,可以动态加载代码。

-module(event_handler).
-compile(export_all).



make(Name) ->
	register(Name,spawn(fun() -> my_handler(fun no_op/1) end)).



my_handler(Fun) ->
	receive
		{add,Fun1} ->
			my_handler(Fun1);
		{event,Any} ->
			(catch Fun(Any)),
			my_handler(Fun)
	end.

no_op(_) ->void.

add_handler(Name,Fun) ->
	Name ! {add,Fun}.

event(Name,X) ->Name ! {event , X}.


   motor_controller 为回调模块

-module(motor_controller).
-compile(export_all).


add_event_handler() ->
	event_handler:add_handler(errors,fun controller/1).

controller(too_hot) ->
	io:format("Turn off the motor~n");
controller(X)	->
	io:format("~w ignored event:~p~n",[?MODULE,X]).</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值