5

代码

while (1)
    {
        keycode = key_hook();
        if (keycode == SPACE || keycode == BKSPACE)
        {
            render_again = 1;
        }
        if (keycode == ESC)
            break;
        if (render_again)
        {
            render_again = 0;
            render(all);
        }
        dprintf(1, "");      //I have no idea why this prevents the program from freezing
    }
    int key_hook()
    {
     char buffer[4];

     read(0, buffer, 4);
     return (*(unsigned int *)buffer);
    }

好的,所以这段代码处理屏幕上文本的重绘。某些文本行使用 加下划线或突出显示termcaps (tputs(tgetstr("us, NULL")......)。一切都打印得很好,但是在第一次重绘文本之后,while 显然会冻结,除非 adprintf/printf存在。该函数只是从 中key_hook读取并将它们转换为.4 bytesstdinint

4

1 回答 1

1

当我上次在这里工作时,我的 key_hook 版本有一个单字节读取循环。这被 1 秒的警报和到目前为止的数据是否是关键前缀的逻辑打破。

警报中断了读取,并停止了冻结

于 2016-01-14T11:19:46.090 回答