亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 關(guān)于tk和fork [打印本頁(yè)]

作者: demil    時(shí)間: 2010-08-16 14:24
標(biāo)題: 關(guān)于tk和fork
請(qǐng)教各位大俠,我想用tk實(shí)現(xiàn)這樣一個(gè)功能: 點(diǎn)擊button stop后,button的item顯示為start,同時(shí)label中的text停止?jié)L動(dòng)顯示,然后點(diǎn)擊button start,label的text會(huì)繼續(xù)顯示。
以下是我寫(xiě)的, 發(fā)現(xiàn)在tk中fork時(shí),sleep 沒(méi)有生效,而且感覺(jué)變量$but改變也沒(méi)有生效,如果不用fork直接使用信號(hào),那么就會(huì)阻塞,sleep 10s后,button才能改變,而不是按下去就改變,
是什么問(wèn)題呢?關(guān)于進(jìn)程、事件驅(qū)動(dòng)這塊我理解的還不深入,希望學(xué)習(xí)下。
#!/usr/bin/perl
use TK;
my $mw = MainWindow->new;
my $mess = "this is from me ^o^";
my $but = "Stop";
my ($ppid,$pid);
$SIG{'USR1'} = sub {
    sleep(10);
};
$ppid = $$;
$mw->Label(-textvariable => \$mess)->pack(-expand => "1");
$mw->after(100,\&scroll);
$mw->Button(
    -textvariable    => \$but,
    -command => sub {
      if($but eq "Start") {
        $pid = fork();
        if ( $pid ==0 ) {
           print "start->stop\n";
        } else {
          wait;
          $but = "Stop";
        }
      } else {
        $pid = fork();
        if ( $pid ==0 ) {
           system("kill -USR1 $ppid");
           print "stop->start\n";
        } else {
          wait;
          $but = "Start";
        }
      }
    }
)->pack;

sub scroll {
$mess =~ /(.)(.*)/;
$mess = "$2$1";
$mw->after(100,\&scroll);
}
$mw->MainLoop;
作者: 黑色陽(yáng)光_cu    時(shí)間: 2010-08-16 15:57

  1. #!/bin/env perl

  2. use strict;
  3. use warnings;
  4. use TK;

  5. my $mw = MainWindow->new;
  6. my $mess = "this is from me ^o^";
  7. my $btn_text = "Stop";
  8. my $event_id = undef;

  9. $mw->Label(-textvariable => \$mess)->pack(-expand => "1");
  10. $mw->Button
  11. (
  12.         -textvariable => \$btn_text,
  13.         -command =>
  14.         sub
  15.         {
  16.                 if($btn_text eq "Start")
  17.                 {
  18.                         $btn_text = "Stop";
  19.                         if (defined $event_id)
  20.                         {
  21.                                 $mw->afterCancel($event_id);
  22.                                 $event_id = undef;
  23.                         }

  24.                         $event_id = $mw->repeat(100, \&scroll);
  25.                 }
  26.                 else
  27.                 {
  28.                         $btn_text = "Start";
  29.                         if (defined $event_id)
  30.                         {
  31.                                 $mw->afterCancel($event_id);
  32.                                 $event_id = undef;
  33.                         }
  34.                 }
  35.         }
  36. )->pack();

  37. $event_id = $mw->repeat(100, \&scroll);
  38. $mw->MainLoop();

  39. #################################################################

  40. sub scroll
  41. {
  42.         $mess = substr($mess, 1) . substr($mess, 0, 1);
  43. }
復(fù)制代碼





歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2