我刚刚使用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泄露”问题的主题,但遗憾的是没有一个解决方案正在发挥作用。
你有什么想法吗?
谢谢,
最大
答案 0 :(得分:0)
这可能不是问题,但您需要为Terminate
窗口提供一个停止主消息循环的main
处理程序。喜欢这个
sub main_Terminate { -1 }