ACE 演练: 让程序响应ctrl+c信号

部署运行你感兴趣的模型镜像

本文发致Stone Jiang的博客以及www.ace-tao.org/bbs。 2008-10-21

转贴请注明。

 

让程序响应ctrl+c信号,并让程序优雅地关闭(后续演练将展示)非常必要。本文即给出如何让程序响应ctrl+c的示例。

从本文您可以学到:

   1. 如何使用MPC工具生成项目工程文件;

   2. 如何编写最简单的ACE程序;

本文适用于:

     ACE菜鸟,并且能已经正确下载、安装ACE。

     ACE高手请漂过。

 

 

过程:

   1. 创建Quit目录,创建quit.mpc文件

   2. 创建 main.cpp, 借用Exit_Signal_Handle类(Exit_Signal_Handle.h,cpp)

   3. 编译,调试

 

1. quit.mpc如下

   

// file: quit.mpc

// author: stone jiang 2005119@gmail.com

// date: 2008-10-21

project (*) :aceexe {
    exename = *
}

2. main.cpp如下

// -*- C++ -*-

//=============================================================================
/**
*  @file    Exit_Signal_Handler.cpp
*
*  $Id$
*
* @author   Stone Jiang (2005119@gmail.com)
*/
//=============================================================================

#include "ace/Log_Msg.h"
#include "ace/Sig_Handler.h"
#include "Exit_Signal_Handler.h"

int ACE_TMAIN(int, ACE_TCHAR *[])
{
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("Starting...../n")));
    ACE_Thread_Semaphore lock (0);

    Exit_Signal_Handler exit_handler (lock);
    ACE_Sig_Handler sig_handler;
    sig_handler.register_handler (SIGINT, &exit_handler);

    ACE_Guard guard (lock);
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("Terminate...../n")));
    return 0;
}

 

3. Exit_Signal_Handle类的实现如下

// -*- C++ -*-

//=============================================================================
/**
*  @file    Exit_Signal_Handler.h
*
*  $Id$
*
* @author   Friedhelm Wolf (fwolf@dre.vanderbilt.edu)
*/
//=============================================================================

#ifndef _EXIT_SIGNAL_HANDLER_H_
#define _EXIT_SIGNAL_HANDLER_H_

#include
#include

/**
* @class Exit_Signal_Handler
*
* @brief this class handles the kill signal for this application in a nice
*        way, releasing a semaphore.
*/
class Exit_Signal_Handler : public ACE_Event_Handler
{
public:

  /// ctor
  Exit_Signal_Handler (ACE_Thread_Semaphore & lock);

  /// dtor
  virtual ~Exit_Signal_Handler ();

  /// Called when object is signaled by OS (either via UNIX signals or
  /// when a Win32 object becomes signaled).
  virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);

private:
  ACE_Thread_Semaphore & lock_;
};

#endif /* _EXIT_SIGNAL_HANDLER_H_ */

// -*- C++ -*-

//=============================================================================
/**
*  @file    Exit_Signal_Handler.cpp
*
*  $Id$
*
* @author   Friedhelm Wolf (fwolf@dre.vanderbilt.edu)
*/
//=============================================================================

#include
#include "Exit_Signal_Handler.h"

Exit_Signal_Handler::Exit_Signal_Handler (ACE_Thread_Semaphore & lock)
  : lock_ (lock)
{
}

Exit_Signal_Handler::~Exit_Signal_Handler ()
{
}

int
Exit_Signal_Handler::handle_signal (int , siginfo_t *, ucontext_t *)
{
  return lock_.release ();
}

 

4. 生成工程文档

  以Viusal studio 2008为例

  如果是linux, vc9改为gnuace,如果是Visual Stuido 2003,2005,改为vc71,vc8

> mwc.pl -type vc9

image

mpc工具为我们生成了Quit.sln

 

5. 编译

   用Viusal Stuido 2008打开Quit.sln (由上一步生成所得),编译。

  也可从命令行编译之

>devenv Quit.sln /Build Debug
image

 

6.运行,查看结果

 

image

 

运行后,屏幕显示

Starting.....

程序阻塞于此,按下ctrl+c组合键后,显示

Terminate.....

程序正常关闭。

 

需要完整源代码请在www.ace-tao.org/bbs留言或发邮件给我索要。

 

Stone Jiang.

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值