【发布时间】:2012-12-31 07:30:51
【问题描述】:
我只是将 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
我发现了几个关于这个“标量泄露”问题的主题,但遗憾的是没有一个有效的解决方案。
你有什么想法吗?
谢谢,
最大。
【问题讨论】:
-
有趣,我刚刚粘贴了您的代码并强制安装了 Win32::GUI。我没有得到这些错误。我是 Windows XP 上的 Perl v5.16.2。
-
你不能这样做。
Win32::GUI不是线程安全的。你想做的事情可能有一个工作:我建议你用谷歌搜索Win32::GUI threads -
好的,谢谢。在这种情况下,有什么替代方案?当我点击一个按钮时,我想在后台做一些事情,但同时 GUI 应该是可控的。使用 WxWidgets 会更好吗?
标签: multithreading perl win32gui scalar