当前位置:  技术问答>linux和unix

关于异步I/O的问题

    来源: 互联网  发布时间:2017-02-23

    本文导语:  小弟在看《unix/linux编程实践教程》这本书,第7章的习题15关于异步I/O的题我有些不懂,题目的大意是:在终端上有个"hello"字符串,用curses库,信号,异步I/O来使得该字符串自动左右移动。下面是代码: #include    ...

小弟在看《unix/linux编程实践教程》这本书,第7章的习题15关于异步I/O的题我有些不懂,题目的大意是:在终端上有个"hello"字符串,用curses库,信号,异步I/O来使得该字符串自动左右移动。下面是代码:

#include        
#include        
#include        
#include        
#include        
/* some global settings main and the handler use */

#define        MESSAGE        "hello"
#define BLANK   "     "

int        row;        /* current row                */
int        col;        /* current column        */
int        dir;        /* where we are going        */
int        delay;        /* bigger => slower        */
int        done;

void        on_input(int);        /* handler for keybd    */
void        enable_kbd_signals();

int main()
{
        initscr();
        crmode();
        noecho();
        clear();

        signal(SIGIO,on_input); /* install a handler        */
        //enable_kbd_signals();   /* turn on kbd signals      */  //为什么注释掉这一句后,字符串就可以自动移动??为什么有这句的时候,必须要按"上下左右"键才可以使得字符串进行移动?

        row   = 10;                /* start here                */
        col   = 0;
        dir   = 1;                /* add 1 to col number        */
        delay = 200;                /* 200ms = 0.2 seconds  */
        done  = 0;

        while(!done)
        {
                usleep(delay);
                move_msg();
        }
        endwin();
        return 0;
}

/*
* called after each sleep period
*/

move_msg()
{
        move( row, col );
        addstr( BLANK );
        col += dir;                        /* move to new column        */
        move( row, col );                /* then set cursor        */
        addstr( MESSAGE );                /* redo message                */
        move(0,COLS-1);
        refresh();                        /* and show it                */

        /*
         * now handle borders
         */
        if ( dir == -1 && col = COLS )
                dir = -1;
}

/*
*  called when a keystroke appears
*/
void on_input(int signum)
{
        int        c = getch();                  /* grab the char */

        switch ( c ){
                case 'Q':
                case EOF: done = 1;
                          break;
                case ' ': dir = -dir;
                          break;
                case 'f': if ( delay > 2 )
                                  delay >>= 1;
                          break;
                case 's': delay 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • c#异步task示例分享(异步操作)
  • java异步方法调用框架 asyn4j
  • 异步消息传递框架 Errai
  • Balsa 异步电路仿真和合成系统
  • 异步I/O库 libeio
  • 异步 JS 工具 Async.js
  • 异步JS开发库 Wind.js
  • 异步JS开发库 Jscex
  • JS异步编程库 WinJS
  • ACE linux下的异步IO
  • 请问单线程异步机制的优势在哪里?
  • Node.js 异步错误处理 LAEH2
  • 纯异步的Server简单实现 Server
  • 内核进程间发送信号用哪个函数,如果没有这东西,那内核里异步通知用哪个东西
  • PHP异步执行技巧分享
  • c#异步读取数据库与异步更新ui的代码实现
  • Swift 异步编程库 Wyrd
  • 异步网络编程框架 itachi
  • C++异步网络开发库 ez_poll
  • C语言的异步DNS解析库 c-ares


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3