Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4043091
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类:

2007-10-10 11:43:15

/**
 Linux/Unix 下signal函数移植Windows下
      Linux下通常的做法:
              signal(SIGINT, sigfunc);  // 设置信号

              void sigfunc(int signo)
              {
                ... //处理信号相关的操作
              }

  以下是Linux下的Ctrl+C在Windows下的实现
  一篇非常不错的参考文献:
 */


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

static is_loop = 1;

// 捕获控制台 Ctrl+C 事件的函数

BOOL CtrlHandler( DWORD fdwCtrlType )
{
  switch (fdwCtrlType)
  {
    /* Handle the CTRL-C signal. */

    case CTRL_C_EVENT:
      printf("CTRL_C_EVENT \n");
      break;


    case CTRL_CLOSE_EVENT:
      printf("CTRL_CLOSE_EVENT \n");
      break;

    case CTRL_BREAK_EVENT:
      printf("CTRL_BREAK_EVENT \n");
      break;

    case CTRL_LOGOFF_EVENT:
      printf("CTRL_LOGOFF_EVENT \n");
      break;

    case CTRL_SHUTDOWN_EVENT:
      printf("CTRL_SHUTDOWN_EVENT \n");
      break;

    default:
        return FALSE;
  }

  is_loop = 0;
  return (TRUE);
}

int main(int argc, char *argv[])
{
    printf("Set Console Ctrl Handler\n");

    SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler, TRUE);

    while (is_loop);

    return 0;
}

阅读(3750) | 评论(0) | 转发(0) |
0

上一篇:一千元的代价

下一篇:网吧里的9种奇人

给主人留下些什么吧!~~