首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++里面的signal函数的有关问题

2013-07-04 
C++里面的signal函数的问题用的是C++的控制台,想按下ctrl+c之后主函数可以重新开始而不是关闭掉程序,尝试

C++里面的signal函数的问题
用的是C++的控制台,想按下ctrl+c之后主函数可以重新开始而不是关闭掉程序,尝试了signal这个函数,的确是能做到了,可是现在有一个问题,就是我发现信号只能捕捉一次,在使用了一次,重新开始了主函数之后,却再也无法正常使用,下面贴代码

#include <signal.h>
#include <Windows.h>
#include <iostream>
using namespace std;
void cs(int n)
{ signal(SIGINT, cs);
  int main();
  if(n==SIGINT) 
 {cout<<"\n你按下了ctrl+c"<<endl;  
  main ();} 
}
int main()
{ void cs(int n);
char ch; 
 cout<<"ab"<<endl;
  signal(SIGINT, cs); 
 while(1)
 {  cin>>ch;  
  Sleep(10);
  if(cin.fail())
  {cin.clear();
   cin.sync();}  
 }    
 return 0;
}

各位大神可以拿到自己的电脑里面运行看看.. 我的signal函数是当程序接收到SIGINT信号时调用cs这个函数,然后我的cs函数的主要工作就是把signal函数再注册一遍,再调回主函数重新开始,但是我发现不能用第二遍,但是如果我不调回主函数..就不会有这个问题,想请教各路大神这是为什么?
(表达能力不太好,谢谢大家了!)
[解决办法]
用 goto 吧:

#include <signal.h>
#include <Windows.h>
#include <iostream>

using namespace std;

static int ctrl_c_pressed = 0;

void cs(int n)
{
signal(SIGINT, cs);

if(n==SIGINT) 
{
cout<<"\n你按下了ctrl+c"<<endl; 
ctrl_c_pressed = 1;

}


int main()

void cs(int n);
char ch; 

main_start:
cout<<"ab"<<endl;
signal(SIGINT, cs); 
while(1)
{
cin>>ch;  
Sleep(10);
if(cin.fail())
{
cin.clear();
cin.sync();

if(ctrl_c_pressed)
{
ctrl_c_pressed = 0;
goto main_start;
}
}  
}    

return 0;
}

热点排行