Multithreading Perl-标量与Win32::GUI和线程一起泄漏

Multithreading Perl-标量与Win32::GUI和线程一起泄漏,multithreading,perl,win32gui,scalar,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',

我只是将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 在全球毁灭期间。 在C:/Perl/site/lib/Win32/GUI.pm第3480行中释放到错误的池35bcd90而不是2a1718 在全球毁灭期间。 标量泄漏:1

我发现了几个关于这个“标量泄漏”问题的话题,但遗憾的是没有一个有效的解决方案

你知道吗

谢谢


Max.

这可能不是问题所在,但您需要为
main
窗口提供一个
Terminate
处理程序,用于停止主消息循环。像这样

sub main_Terminate { -1 }

有趣的是,我刚刚粘贴了您的代码并强制安装了Win32::GUI。我不明白那些错误。我是WindowsXP上的PerlV5.16.2。你不能这样做<代码>Win32::GUI不是线程安全的。对于您想做的事情,可能还有一个工作要做:我建议您搜索
Win32::GUI线程
好的,谢谢。在这种情况下,替代方案是什么?当我点击一个按钮时,我想在后台做一些事情,但同时GUI应该是可控的。使用WxWidgets会更好吗?