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