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

标签 multithreading perl io

看起来旧的良好警报()调用的时代已经结束,所以如何中断由 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/

相关文章:

perl - 将 perl 连接到 ms 访问

linux - PHP 的 proc_open()、proc_close() 等的 Perl 等效项是什么?

c# - 如何访问 SerialPort.Flush() 和 SerialPort.Finalize() 函数

python - 我遇到了重复尝试阻止问题

C++ std::lock 和 std::unique_lock 有什么区别?

c - 如何在线程之间暂停执行?

linux - 当另一个线程在 Perl 中停止时停止一个线程

java - Java中的文件IO异常

c# - 最佳实践 : C# working with DB

c# - 为什么在 UI 线程上锁定会触发 OnPaint 事件?