http://blog.csdn.net/trojanpizza/article/details/6656321
- #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;
- }
控制台程序 Ctrl+C 异常问题 First-chance exception in ***.exe [Kernel32.dll].....
//编写一个win32控制台程序 需要处理Ctrl+C的中断事件。但在Debug模式下,按Ctrl+C 会提示上述异常。
//下面两种方式,都会出现。不知道是什么原因。
#include "stdafx.h"
#include <signal.h>
#include <stdlib.h>
#include <windows.h>
//方式一
void do_signal(int signo)
{
printf("reveived signal %d/n",signo);
exit(0);
}
int main(int argc, char* argv[])
{
signal(SIGBREAK,do_signal);
signal(SIGINT,do_signal);
while(1)
{
;
}
return 0;
}
//方式二
BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
switch(CEvent)
{
case CTRL_C_EVENT:
MessageBox(NULL,"CTRL + C received!", "signal", MB_OK);
break;
case CTRL_BREAK_EVENT:
MessageBox(NULL,"CTRL+BREAK received!", "signal", MB_OK);
break;
case CTRL_CLOSE_EVENT:
MessageBox(NULL,"Program being closed!", "signal", MB_OK);
break;
case CTRL_LOGOFF_EVENT:
MessageBox(NULL,"User is logging off!", "signal", MB_OK);
break;
case CTRL_SHUTDOWN_EVENT:
MessageBox(NULL,"User is logging off!", "signal", MB_OK);
break;
}
return TRUE;
}
int main(int argc, char* argv[])
{
char buf[256];
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) == FALSE)//
{
printf("Unable to install event handler!/n");
return -1;
}
// GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
scanf("%s", buf);
return 0;
}
把问题记录下来,希望大家给予指点。