(3)Linuxのmanページ:ncurses:キーを押すまで、getchはなぜ待たないのですか? ncursesベースから
NODELAYオプションは、getchは、非閉塞コールされます。入力が準備完了でない場合、getchはERRを返します。無効にすると(bfがFALSE)、getchはキーが押されるのを待ちます。
キーが押されるまで、私の例でgetchが待たないのはなぜですか? Cで
#!/usr/bin/env perl6
use v6;
use NativeCall;
constant LIB = 'libncursesw.so.5';
constant ERR = -1;
class WINDOW is repr('CPointer') { }
sub initscr() returns WINDOW is native(LIB) {*};
sub cbreak() returns int32 is native(LIB) {*};
sub nodelay(WINDOW, bool) returns int32 is native(LIB) {*};
sub getch() returns int32 is native(LIB) {*};
sub mvaddstr(int32,int32,str) returns int32 is native(LIB) {*};
sub nc_refresh() is symbol('refresh') returns int32 is native(LIB) {*};
sub endwin() returns int32 is native(LIB) {*};
my $win = initscr(); # added "()"
cbreak();
nodelay($win, False);
my $c = 0;
loop {
my $key = getch(); # getch() doesn't wait
$c++;
mvaddstr(2, 0, "$c");
nc_refresh();
next if $key == ERR;
last if $key.chr eq 'q';
}
endwin();
これはncurses 6とperl6 --versionの "Perl 6.c.を実装するMoarVMバージョン2016.で構築されたRakudoバージョン2016.02です。 Perl 6のどのバージョンを実行していますか? – Coke
コークス:perl6 -v: "これは、Perl 6.c.を実装するMoarVMバージョン2016.02-33-g1e3d2ac で構築されたRakudoバージョン2016.02-151-gb243a96です。 –