c语言信号,产生, 和 运用的问题 , signal。

首席撸起水泡 发布于 2016/05/06 21:57
阅读 478
收藏 0

我在看贪吃蛇的实现源码,---->[地址]  注意看void Snake_Move()  函数部分,

void main(void)  
{  
    Init_Disp();            /* init and display the interface */  
    Food_Disp();            /* display food */  
    DLL_Snake_Create();     /* create double linked list and display snake*/  
    signal(SIGALRM, Snake_Move);  
    set_ticker(DFL_SPEED);  
    Key_Ctrl();             /* using keyboard to control snake */  
    Wrap_Up();              /* turn off the curses */  
}
Snake_Move 函数一直自己调用自己,实现蛇移动,


但是Key_Ctrl() 函数还没执行呀,它是怎么得到Key_Ctrl() 的值的,

或者说当执行到Key_Ctrl(),时它是怎么返回到Snake_Move()函数的,

//我的理解是signal()函数,把Snake_Move(),暂存在一个位置独立运行,,

//我调试了一下,有点复杂,不知道SIGALRM这个信号是怎么来的,


等等。。好像有点思路了。。。

加载中
0
刀剑_菩提
刀剑_菩提
setitimer 你完全没理解信号,alarm和setitimer函数都会在参数时间到达后向自己发送SIGALARM信号,setitimer是设置的循环时间,alarm是单次。你看看信号的资料和书吧 推荐unix高级编程
0
首席撸起水泡
首席撸起水泡

[我是提问者]

这是我的test, 怎么没反应。。。。。

#include <signal.h>

char ch = '\0';
int i = 0;
void prin_ch()
{
    int judege = 0;
    signal(SIGALRM, SIG_IGN);
    if(i++ == 5)
    {
        i=0;
        judege = 1;
    }
    if(judege)
    {
        printf("%c\n", ch);
    }
    signal(SIGALRM, prin_ch);
}

int main(int argc, char const* argv[])
{
    signal(SIGALRM, prin_ch);
    while((ch=getchar())!=EOF)
        ;
    return 0;
}



返回顶部
顶部