它不在标准 C 上,我试图在 C 中开发应用程序。这是场景:它就像处理器的电源模式实现,这样当处理器从睡眠中唤醒时,会产生一个中断,这样如果我那时有一个事件回调,我可以唤醒我的其他模块来完成它的进程。为此,我正在尝试使用静态分配来实现链表来访问内存池,这样当注册回调时,它就会存储在内存池中. 因此,当触发回调时,它会向已注册的模块发送事件通知。
但我不确定如何实现它。请提供一种实现方式
它不在标准 C 上,我试图在 C 中开发应用程序。这是场景:它就像处理器的电源模式实现,这样当处理器从睡眠中唤醒时,会产生一个中断,这样如果我那时有一个事件回调,我可以唤醒我的其他模块来完成它的进程。为此,我正在尝试使用静态分配来实现链表来访问内存池,这样当注册回调时,它就会存储在内存池中. 因此,当触发回调时,它会向已注册的模块发送事件通知。
但我不确定如何实现它。请提供一种实现方式
你是说信号吗?比如当你遇到崩溃或被零除?这是捕获信号的 posix 示例:
void abortHandler( int signum, siginfo_t* si, void* unused )
{
const char* name = NULL;
switch( signum )
{
case SIGABRT: name = "SIGABRT"; break;
case SIGSEGV: name = "SIGSEGV"; break;
case SIGBUS: name = "SIGBUS"; break;
case SIGILL: name = "SIGILL"; break;
case SIGFPE: name = "SIGFPE"; break;
case SIGPIPE: name = "SIGPIPE"; break;
}
if ( name )
printf( "Caught signal %d (%s)\n", signum, name );
else
printf( "Caught signal %d\n", signum );
}
void trapSignals()
{
struct sigaction sa;
sa.sa_flags = SA_SIGINFO;
sa.sa_sigaction = abortHandler;
sigemptyset( &sa.sa_mask );
sigaction( SIGABRT, &sa, NULL );
sigaction( SIGSEGV, &sa, NULL );
sigaction( SIGBUS, &sa, NULL );
sigaction( SIGILL, &sa, NULL );
sigaction( SIGFPE, &sa, NULL );
sigaction( SIGPIPE, &sa, NULL );
}