如何为中断注册和取消注册事件

时间:2012-07-13 12:36:44

标签: c events event-handling interrupt interrupt-handling

它不在标准C上,我试图在C中开发应用程序。这是场景:它就像处理器的电源模式实现一样,当处理器从睡眠状态唤醒时,会产生一个中断,所以如果我在那一点上有一个事件回调,我可以唤醒我的其他模块来完成它的进程。为此,我试图使用静态分配来实现链接列表来访问内存池,这样当一个回调被注册时,它被存储在内存池。因此,当触发回调时,它会向已注册的模块发送事件通知。

但我不确定如何实现它。请提供实施方法

1 个答案:

答案 0 :(得分:0)

你的意思是信号吗?就像你遇到崩溃或零除?以下是捕获信号的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 );
}