看起来旧的好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()调用?
答案 0 :(得分:1)
为什么不尝试使用其中一个事件模块,而不是线程化(在Perl中最不受支持,而且大多数人不赞成)。这是Perl中并发的标准解决方案。