2012-08-15 44 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