如果你想按照posix方式(处理signal),请看MSDN:
%28vs.71%29.aspx
Registering a Control Handler Function转自MSDN
This is an example of the
function that is used to install a control handler.
When a CTRL+C signal is received, the control handler returns TRUE,
indicating that it has handled the signal. Doing this prevents other
control handlers from being called.
When a CTRL_CLOSE_EVENT signal is received, the control handler
returns TRUE, causing the system to display a dialog box that gives the
user the choice of terminating the process and closing the console or
allowing the process to continue execution. If the user chooses not to
terminate the process, the system closes the console when the process
finally terminates.
When a CTRL+BREAK, CTRL_LOGOFF_EVENT, or CTRL_SHUTDOWN_EVENT signal
is received, the control handler returns FALSE. Doing this causes the
signal to be passed to the next control handler function. If no other
control handlers have been registered or none of the registered handlers
returns TRUE, the default handler will be used, resulting in the
process being terminated.
- #include <windows.h>
-
#include <stdio.h>
-
-
BOOL CtrlHandler( DWORD fdwCtrlType )
-
{
-
switch( fdwCtrlType )
-
{
-
// Handle the CTRL-C signal.
-
case CTRL_C_EVENT:
-
printf( "Ctrl-C event\n\n" );
-
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" );
-
return( TRUE );
-
-
// Pass other signals to the next handler.
-
case CTRL_BREAK_EVENT:
-
Beep( 900, 200 );
-
printf( "Ctrl-Break event\n\n" );
-
return FALSE;
-
-
case CTRL_LOGOFF_EVENT:
-
Beep( 1000, 200 );
-
printf( "Ctrl-Logoff event\n\n" );
-
return FALSE;
-
-
case CTRL_SHUTDOWN_EVENT:
-
Beep( 750, 500 );
-
printf( "Ctrl-Shutdown event\n\n" );
-
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" );
-
-
while( 1 ){ }
-
}
-
else
-
{
-
printf( "\nERROR: Could not set control handler");
-
return 1;
-
}
-
return 0;
-
}
阅读(6318) | 评论(0) | 转发(0) |