Winapi:无法注册信号处理程序

时间:2016-03-22 10:39:52

标签: windows winapi signals

这是我的代码:

#include <windows.h> 
#include <stdio.h> 

BOOL CtrlHandler( DWORD fdwCtrlType ) 
{ 
  printf("I'm In...\n");
  fflush(stdout);

  switch( fdwCtrlType ) 
  { 
    // Handle the CTRL-C signal. 
    case CTRL_C_EVENT: 
     printf( "Ctrl-C event\n\n" );
     fflush(stdout);
     Beep( 750, 300 ); 
     return( TRUE );

   // CTRL-CLOSE: confirm that the user wants to exit. 
    case CTRL_CLOSE_EVENT: 
     Beep( 600, 200 ); 
     printf( "Ctrl-Close event\n\n" );
     fflush(stdout);
     return( TRUE ); 

    // Pass other signals to the next handler. 
   case CTRL_BREAK_EVENT: 
    Beep( 900, 200 ); 
    printf( "Ctrl-Break event\n\n" );
    fflush(stdout);
    return FALSE; 

   case CTRL_LOGOFF_EVENT: 
    Beep( 1000, 200 ); 
    printf( "Ctrl-Logoff event\n\n" );
    fflush(stdout);
    return FALSE; 

   case CTRL_SHUTDOWN_EVENT: 
    Beep( 750, 500 ); 
    printf( "Ctrl-Shutdown event\n\n" );
    fflush(stdout);
    return FALSE; 

   default: 
    return FALSE; 
 } 
} 

int main( void ) 
{ 
  if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) ) 
  { 
    printf( "\nThe Control Handler is installed.\n" ); 
    printf( "\n -- Now try pressing Ctrl+C or Ctrl+Break, or" ); 
    printf( "\n    try logging off or closing the console...\n" ); 
    printf( "\n(...waiting in a loop for events...)\n\n" ); 
    fflush(stdout);

    while( 1 ){ } 

  } 
  else 
  {
    printf( "\nERROR: Could not set control handler");
    fflush(stdout); 
    return 1;
  }

return 0;
}

正如您所看到的,我正在使用msdn网站提供的示例,但我的问题是,当我启动应用程序时The Control Handler is installed.

-- Now try pressing Ctrl+C or Ctrl+Break, or
   try logging off or closing the console...

(...waiting in a loop for events...)
得到印刷但是当我点击CTR + C时没有任何事情发生(没有任何内容被打印)并且进程终止。我在几个地方添加了fflush功能,以确保它不是打印问题。感谢。

0 个答案:

没有答案
相关问题