如何在perl线程中中断I / O调用?

时间:2012-07-23 15:00:54

标签: multithreading perl io

看起来旧的好alarm()调用的时间结束了,所以如何中断阻塞read()和write()的perl线程(使用那个全新的'threads'模块)假设代码制作那些阻止呼叫无法改变?实际问题是阻碍与Modbus设备的通信,所以我创建了一个简单的测试用例,不会让你陷入RS-485地狱:

use threads;
use IO::Handle;
threads->create(sub {
        $io = IO::Handle->new_from_fd(fileno(STDIN), 'r') or die;
        $br = read $io, $buf, 100;
        warn "read: $br";
});
while(1) {threads->yield()};

这里,除非你按下键盘上的Ctrl-D,否则永远不会执行warn()。是否有任何简单的解决方案来超时read()调用?

1 个答案:

答案 0 :(得分:1)

为什么不尝试使用其中一个事件模块,而不是线程化(在Perl中最不受支持,而且大多数人不赞成)。这是Perl中并发的标准解决方案。