读串口:如何中断读阻塞操作

时间:2015-10-18 23:50:29

标签: perl

我有一个PERL应用程序,它启动了一个用于串行通信的线程...... 我使用lib使用Device :: SerialPort;

while($bRun)
{
    print "Waiting for serial port data...";

    my ($count,$msg)=$SerialPort->read(255); # will read _up to_ 255 chars

    if ($count > 0) 
    {
            #Process
    }

    #sleep(1);
}

但是即使在读操作期间也必须能够停止该线程。

我已经有一个方法可以将bRun设置为false,但是如果它处于读操作状态,如何解除阻塞?

非常感谢

亚历

1 个答案:

答案 0 :(得分:0)

http://search.cpan.org/dist/Device-SerialPort/SerialPort.pm对于如何进行非阻塞I / O不是很清楚。听起来它在内部使用perl的select来查看字符是否可用。

我之前没有编写过多线程的perl程序。你能把信号发送到另一个会中断系统调用的线程吗?

如果您只想停止线程,不要让它突破读取并执行其他操作,那应该更容易。只是正常杀死它。