3

PerlTKとスレッドを使用して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を削除すると、追加のスレッドを実行してプログラムを終了するというエラーが発生するので、それで終了すると確信しています。繰り返しになりますが、私のエラーはバージョンの制限によるものだと思うので、それを隠すことだけを考えていました。ありがとう!

4

2 に答える 2

-1

これは PERL の問題です。たとえ $thread->detach し、スレッドが正常に終了したとしても、PERL/windows バージョンのいくつかの組み合わせでこのエラーが発生します。

気にする必要はありません、ただ隠してください。

于 2013-07-26T08:57:43.437 に答える