相关疑难解决方法(0)

每当signal()以react块顺序依赖时?

我有一个小程序,运行到收到SIGINT或收到来自stdin的两行(按Enter键两次)。反应块逻辑为:

react {
    whenever signal(SIGINT) {
        say "Got signal";
        exit;
    }
    whenever $*IN.lines.Supply {
        say "Got line";
        exit if $++ == 1 ;
    }
}
Run Code Online (Sandbox Code Playgroud)

程序将按预期在两行输入中退出。

但是,CTRL-C不会执行任何操作,除非它后跟一行(输入)。

如果我切换everyever块的顺序,则程序会被SIGINT中断,但无论何时都不会执行信号

react {
    whenever $*IN.lines.Supply {
        say "Got line";
        exit if $++ == 1 ;
    }
    whenever signal(SIGINT) {
        say "Got signal";
        exit;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用信号接头之前是否还需要其他设置?在反应块中,每当块的顺序重要吗?

更新资料

因此,似乎lines()调用阻止了React块的执行(感谢@Håkon)。我有点明白。

与用于读取套接字的类似代码结构进行比较时,我很困惑。数据的存在(或缺少)对信号处理程序的执行没有影响,并且在此示例中它可以读取行:

my $listener=IO::Socket::Async.listen("0.0.0.0",4432);
react {
    whenever $listener {
        whenever $_.Supply.lines() {
            say "Got line";
        }
    }
    whenever signal(SIGINT) {
        say "Got signal";
        exit;
    }
} …
Run Code Online (Sandbox Code Playgroud)

perl6 raku

8
推荐指数
1
解决办法
215
查看次数

标签 统计

perl6 ×1

raku ×1