Perl - 使用Win32 :: GUI和线程泄漏的Scalars

时间:2013-01-16 20:49:59

标签: multithreading perl win32gui scalar

我刚刚使用Win32-GUI和线程(Perl 5.16),我想出了一些我不太了解的警告和错误。

代码如下:

    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行免费错误的游泳池35bcd90而不是2a1718   在全球破坏期间。   错误的游泳池35bcd90而不是2a1718在C:/Perl/site/lib/Win32/GUI.pm第3480行   在全球破坏期间。   Scalars泄露:1

我发现了几个关于这个“Scalars泄露”问题的主题,但遗憾的是没有一个解决方案正在发挥作用。

你有什么想法吗?

谢谢,

最大

1 个答案:

答案 0 :(得分:0)

这可能不是问题,但您需要为Terminate窗口提供一个停止主消息循环的main处理程序。喜欢这个

sub main_Terminate { -1 }