2015-10-18 125 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 –