0

スレッド (Perl 5.16) と組み合わせて Win32-GUI をいじってみたところ、よくわからない警告とエラーがいくつか出てきました。

コードは次のとおりです。

    use strict;
    use warnings;
    use Win32::GUI();
    use threads;

    my $main = Win32::GUI::Window->new(
        -name => 'main',
        -title => 'Multithreaded Test',
        -size => [300,100],
    );
    my $button1 = $main->AddButton(
        -name => 'button1',
        -text => 'Click me',
        -pos => [10,10],
        -width => 120,
    );
    sub button1_Click {
        my $thread1 = threads->create(\&do_something);
        $thread1->join();
    }
    sub do_something {
        sleep(1);
    }
    $main->Center();
    $main->Show();
    Win32::GUI::Dialog();

ボタンをクリックして 1 秒後にスレッドが結合されると、次のコンソール出力が表示されます。

グローバルな破棄中に、C:/Perl/site/lib/Win32/GUI.pm 行 3480 で 2a1718 ではなく間違ったプール 35bcd90 に解放されます。グローバルな破棄中に、C:/Perl/site/lib/Win32/GUI.pm 行 3480 で 2a1718 ではなく間違ったプール 35bcd90 に解放されます。リークされたスカラー: 1

この「スカラーがリークした」問題に関するいくつかのトピックを見つけましたが、残念ながら機能している解決策ではありません。

何か考えはありますか?

ありがとう、

最大。

4

1 に答える 1

0

これは問題ではないかもしれませんが、メイン メッセージ ループを停止するTerminateハンドラをウィンドウに提供する必要があります。mainこのような

sub main_Terminate { -1 }
于 2013-01-16T21:06:01.267 に答える