2012-03-08 14 views

答えて

2

子供のプロセスでメッセージを作成し、alarmを使用して遅延後にプロセスを終了することを考えました。 Tkで:

sub tmpMsgBox { 
    my ($message,$delay) = @_; 
    if (fork() == 0) { 
     my $topWin = MainWindow->new; 
     my $label = $topWin->Label(); 
     my $ok = $topWin->Button(); 
     $label->pack(-side => 'top'); 
     $ok->pack(-side => 'bottom'); 
     $label->configure(-text => $message); 
     $ok->configure(-text => 'Ok', -command => sub {exit}); 

     $SIG{ALRM} = sub {exit}; 
     alarm $delay || 1; 
     $topWin->MainLoop; 
    } 
} 

for (3..10) { 
    tmpMsgBox("This window will disappear in $_ seconds", $_); 
} 

私はしかし、Tkはforkとうまく果たしているとは思わないので、あなたも、あなたのメインプロセスでTkを使用している場合は、このアイデアは、おそらくそれほどうまく機能しません。

1

Desktop::Notifyは、デスクトップのパッシブ通知ポップアップへの標準準拠のインターフェイスです。あなたが何をしたいか

perl -MDesktop::Notify -e' 
    Desktop::Notify 
     ->new 
     ->create(
      body => q{why hello there}, 
      timeout => 3000 
     )->show' 
0

は、(ユーザーが何かを選択しない場合、メッセージの送信をキャンセルする覚えて!)あなたのタイムアウト後のウィンドウに破棄メッセージを送信することですこれを行うのTkの確かにできます。

# Make the timeout something like this... 
$id = $widget->after(3000, sub { 
    $widget->destroy; 
}); 

# To cancel, just do... 
$id->cancel; 

もちろん、ウィジェットが強制的に消え去るときにブロックしないようにする必要があります。これは他の方法でもウィジェットを殺すとトラブルを防ぐので、ダブルボーナスです。

関連する問題