gpt4 book ai didi

windows - 在 Windows 上的 STDIN 上使用 IO::Select

转载 作者:可可西里 更新时间:2023-11-01 09:27:33 28 4
gpt4 key购买 nike

当我在 Linux 系统上运行下面的代码时,正如预期的那样,它大约每两秒输出一次 Nothing is ready,并且还会将输入的任何内容输出到控制台。

但在 Windows 上,can_read 立即返回零项。

use IO::Select;

my $sel = IO::Select->new();
$sel->add(\*STDIN);

while ( 1 ) {

my @ready = $sel->can_read(2);

if ( scalar @ready == 0 ) {
print "Nothing is ready\n";
}

foreach my $fh ( @ready ) {

if ( $fh eq \*STDIN ) {
my $in = <STDIN>;
print "got $in from stdin\n";
}
}
}

select 似乎只适用于 Windows 套接字,不适用于 STDIN。如何在 Windows 系统的 STDIN 上使用 IO::Select

最佳答案

你不能,perldoc perlport 声明:

select  Only implemented on sockets. (Win32, VMS)

这是由 Windows 本身只为套接字实现 select() 引起的,参见 https://learn.microsoft.com/de-de/windows/desktop/api/winsock2/nf-winsock2-select .

Windows 等效项似乎是 I/O Completion Ports .但是您必须找到一种从 Perl 中使用它们的方法。

如果您真的只关心 STDIN,您可以使用 Term::ReadKey 循环轮询,其中 ReadMode 为 -1(非阻塞)。正如模块名称所暗示的那样,这可能只适用于 tty。

关于windows - 在 Windows 上的 STDIN 上使用 IO::Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52183503/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com