gpt4 book ai didi

multithreading - 如何中断 perl 线程中的 I/O 调用?

转载 作者:行者123 更新时间:2023-12-04 04:32:44 26 4
gpt4 key购买 nike

看起来旧的良好警报()调用的时代已经结束,所以如何中断由 perl 线程(使用全新的“线程”模块)制作的阻塞读取()和写入(),假设代码进行这些阻塞调用不能改变吗?实际问题是与 Modbus 设备的通信卡住了,所以我创建了一个简单的测试用例,不会让您陷入 RS-485 hell :

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()};

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

最佳答案

而不是线程(这在 Perl 中充其量是不支持的,而且大多不赞成),为什么不尝试其中一个事件模块呢?这是 Perl 中并发的标准解决方案。

关于multithreading - 如何中断 perl 线程中的 I/O 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615161/

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