2015-10-18 108 views
0

我有一个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,但是如果在读操作中如何解锁线程呢?

非常感谢

亚历

回答

0

http://search.cpan.org/dist/Device-SerialPort/SerialPort.pm不上怎么办非阻塞I/O非常清晰。这听起来像在内部使用perl的select来查看字符是否可用。

我以前没有写过多线程的perl程序。你可以发送信号给另一个线程,这会中断系统调用吗?

如果你只是想停止线程,而不是让它摆脱阅读和做别的事情,那应该更容易。只要正常杀死它。

+0

似乎信号是进程的上下文,而不是线程的上下文...我想停止线程,因为这将是代码后,必须在阅读中断后执行... – Alexandre

+0

@亚历山大:我没有看过事情在Perl中,但底层的Unix系统调用接口当然允许发送信号到线程。请参阅http://linux.die.net/man/3/pthread_kill –