2012-08-15 41 views
3

我已經使用Perl TK和線程編寫了一個GUI。一切都很好,直到程序退出。此時我收到了分段錯誤。我相信我盡我所能管理我的線程,並且分段錯誤僅僅是由於Perl 5.8.8版中的線程造成的。我知道這個版本很舊,但因工作原因我無法更新。所以,我的問題是,我可以簡單地隱藏分段錯誤嗎?或者,是否有徹底清理線程的絕對方法?我不認爲我的代碼是相關的,由於問題的性質,但這裏是我結束我的主題:使用線程和Perl隱藏分段錯誤Perl 5.8.8 TK

my $thr = threads->create(\&worker); ##this is created before any TK objects 

sub worker { 

while($run){ 
    ##do thready-stuff here 
} 

} 

sub OnExit { 
$run=0; 
exit 0; 
} 

其中$運行的共享變量和&的OnExit綁定到窗口被關閉。如果我刪除了$ run = 0,那麼我得到一個關於退出程序的錯誤,並且有一個額外的線程正在運行,所以我非常確定這會結束它。再次,我相信我的錯誤是由於版本限制,所以我只是想隱藏它。謝謝!

+0

如何關閉Perl/TK?你在做$ mainwin->銷燬還是退出? – stark 2012-08-15 21:40:15

+0

我只是使用出口。 $ mainwin->銷燬幫助嗎?我會在此期間進行調查。 – Glicholas 2012-08-16 13:30:33

+0

我有這個問題,但它似乎只發生在Windows 7,現在Windows XP。我們使用相同的古代perl 5.8.8。和PerlTK。 – 2013-07-25 20:17:27

回答

2

請參閱Suppress/Mute windows crash message box並添加use Win32API::File(); Win32API::File::SetErrorMode(2);

+0

與perl.5.8.8一起使用。它仍然從命令行輸出「Segmentation Fault」,但是如果我從BAT文件運行perl腳本,則不會再出現錯誤消息。你得到你的50分:) – 2013-07-30 17:50:58

-1

這是一個PERL問題,即使你是$ thread-> detach,並且線程正常退出,PERL/windows版本的某些組合仍然會出現此錯誤。

沒什麼可擔心的,只是隱藏它。

+0

如何隱藏「Perl命令行解釋器停止工作」窗口彈出? – 2013-07-26 20:10:55

+0

這並沒有真正回答這個問題。請不要將它作爲答案發布。 – michaelb958 2013-07-29 11:18:12

+0

這是一個答案,這是一個Windows PERL bug – 2013-09-12 07:45:49