【问题标题】:Hide a Segmentation Fault Perl 5.8.8 with Threads and Perl TK使用线程和 Perl TK 隐藏分段错误 Perl 5.8.8
【发布时间】:2012-08-12 02:14:02
【问题描述】:

我使用 Perl TK 和 Threads 编写了一个 GUI。在程序退出之前,一切都运行良好。这时我得到一个分段错误。我相信我正在尽我所能地管理我的线程,并且分段错误仅仅是由于 Perl 版本 5.8.8 中的线程。我知道这个版本很老了,但是因为工作不能更新。所以,我的问题是,我可以以某种方式简单地隐藏分段错误吗?或者,有没有一种万无一失的方法来彻底清理线程?由于问题的性质,我认为我的代码不相关,但这是我结束线程的方式:

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;
} 

其中 $run 是一个共享变量,&OnExit 绑定到正在关闭的窗口。如果我删除 $run=0 ,我会收到一个关于退出程序并运行额外线程的错误,所以我很确定这会结束它。同样,我相信我的错误是由于版本限制,所以我只想隐藏它。谢谢!

【问题讨论】:

  • 你是如何关闭 Perl/TK 的?你是在做 $mainwin->destroy 还是直接退出?
  • 我只是在使用退出。 $mainwin->destroy 会帮忙吗?在此期间我会调查一下。
  • 我有这个问题,但它似乎只发生在 Windows 7 和现在的 Window XP 上。我们使用的是同一个古老的 perl 5.8.8。和 PerltK。

标签: multithreading perl segmentation-fault tk


【解决方案1】:

查看Suppress / Mute windows crash message box并添加use Win32API::File(); Win32API::File::SetErrorMode(2);

【讨论】:

  • 适用于 perl.5.8.8。它仍然从命令行打印“Segmentation Fault”,但如果我从 BAT 文件运行 perl 脚本,则不会再出现错误消息。你得到你的 50 分 :)
【解决方案2】:

这是一个 PERL 问题,即使您 $thread->detach,并且线程正常退出,在某些 PERL/windows 版本的组合中您仍然会收到此错误。

不用担心,只是隐藏它。

【讨论】:

  • 如何隐藏“Perl 命令行解释器已停止工作”窗口不弹出?
  • 这并不能真正回答问题;请不要将其发布为答案。
  • 这是一个答案,这是一个 windows PERL 错误
猜你喜欢
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
相关资源
最近更新 更多