免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1788 | 回复: 0
打印 上一主题 下一主题

请教 Tk 和 threads [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-27 20:57 |只看该作者 |倒序浏览
问题同 http://www.perlmonks.org/?node_id=783017 一样 就直接照搬那人的了

无cookie情况下输入网站 并点击下载 图片下载下来了
但是
windows 对话框 Perl Command Line Interpreter 遇到问题需要关闭。我们对此引起的不便表示抱歉。

perl
显示错误如下:
Attempt to free non-existent shared string '_TK_RESULT_', Perl interpreter: 0x2e3642c at C:/Perl/lib/Tk.pm line 252.
Attempt to free non-existent shared string '_TK_RESULT_', Perlinterpreter: 0x2e3642c at C:/Perl/lib/Tk/Widget.pm line 98 duringglobal destruction.
Free to wrong pool 2e33d20 not 284fb0 at C:/Perl/lib/Tk/Widget.pm line 98 during global destruction.


  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use threads;
  5. my $cks;
  6. my $url;
  7. my $filename;
  8. my $cks_enter;
  9. my $url_enter;
  10. my $fnm_enter;

  11. sub dd{
  12.   my $thr1 = threads->new(\&d);
  13.   $thr1->detach();
  14. }

  15. use Tk;

  16. my $mw = MainWindow->new();
  17. $mw->resizable( 0,0 );
  18. $mw->title("test");

  19. my $frame = $mw->Frame(-borderwidth => 2,-relief => 'groove')->pack();
  20. my $bttn = $mw->Button(-text => "Down",-command => \&dd)->pack(-side => 'left');

  21. $frame->Label(-text => 'Cookies:')->pack();
  22. $cks_enter = $frame->Entry(-textvariable => \$cks,-width => 50)->pack();

  23. $frame->Label(-text => 'URL:')->pack();
  24. $url_enter = $frame->Entry(-textvariable => \$url)->pack(-expand => 1, -fill => 'x');

  25. $frame->Label(-text => 'Filename:')->pack();
  26. $fnm_enter = $frame->Entry(-textvariable => \$filename)->pack(-expand => 1, -fill => 'x');
  27. MainLoop;


  28. sub d {

  29. $cks = $cks_enter->get();
  30. chomp($cks);
  31. $url = $url_enter->get();
  32. chomp($url);
  33. $filename = $fnm_enter->get();
  34. chomp($filename);
  35. use LWP::UserAgent;
  36. my @headers = (
  37.    'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; EN; rv:1.9.0.11) Gecko/2009060215 Firefox/3.5',
  38.    'cookie' => "$cks",
  39. );

  40. my $ua = LWP::UserAgent->new();
  41. my $req = $ua->get($url,@headers);
  42. my $cont = $req->content;
  43. open PIC, ">$filename";
  44. binmode(PIC);
  45. print PIC "$cont\n";
  46. close PIC;
  47. }
复制代码


疑问在这儿:
1. 此处的 threads 是指 生成并维持tk GUI需要一个threads, 而 下载 需要另外一个 是么?
2. 如程序中所示, 目前也是两个threads么? gui的这个没有声明 但是确实是存在的?
3. 错误信息中提到了 共享变量的问题,是指 $cks、$url、$filename、$cks_enter、$url_enter、$fnm_enter这些变量都需要shared么 因为 dd这个线程中和 产生的gui中都有用到这些变量或对象?还是说需要shared其他的变量?
4. Thread:: Queue 此处需要使用么?

非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP