UEFI shell 程式退出后,是否有机会继续执行? 应用程序执行完毕后,一般都会结束,怎样达到类似callback or event 功能
在UEFI shell中,一个程序退出后,默认情况下不会继续执行。但是可以通过以下两种方式实现类似callback或事件的功能:
EFI_STATUS set_timer(VOID)
{
EFI_TIMER_DELAY TimerDelay;
EFI_TIMER_NOTIFY NotifyFunction;
NotifyFunction = (EFI_TIMER_NOTIFY) callback_function;
TimerDelay = 5 * EfiTimerPeriodic; // 5 second timer
Status = gBS->SetTimer(gTimer, TimerDelay, NotifyFunction, NULL);
return Status;
}
VOID callback_function(IN EFI_EVENT Event,
IN VOID *Context)
{
// This is the callback function
}
这个例子会注册一个5秒的定期定时器,回调函数callback_function会每5秒执行一次。
2. 创建事件并注册回调函数
可以通过efi_create_event()函数创建自定义事件,并设置事件被触发时的回调函数。当事件被触发后,回调函数会被执行。
例如:
EFI_STATUS create_event(VOID)
{
UINT32 EventType;
EFI_EVENT Event;
VOID *Registration;
EventType = EVT_NOTIFY_SIGNAL;
Status = gBS->CreateEvent(EventType, TPL_CALLBACK, callback_function, NULL, &Event);
// Trigger the event
gBS->SignalEvent(Event);
return Status;
}
VOID callback_function(IN EFI_EVENT Event,
IN VOID *Context)
{
// This is the callback function
}
这个例子创建了一个事件,并设置了回调函数callback_function。当事件被触发后,回调函数会被执行。
所以,通过上述两种方法,可以在UEFI shell中实现事件或回调函数,达到程序退出后继续执行的效果。
希望这个回答能够帮助您理解在UEFI shell如何实现类似事件或回调的机制。