2012-08-02 4 views
2

내가 펄과 저주에 새로 온 루프하지만 여기에서 시작하는 루프를 실행하려면 코드를 얻기 위해 사투를 벌인거야 내 코드입니다 : 당신이 볼 수 있듯이펄 저주 : UI는 -

#!/usr/bin/env perl 

use strict; 
use Curses::UI; 

sub myProg { 
    my $cui = new Curses::UI(-color_support => 1); 

    my $win = $cui->add(
     "win", "Window", 
     -border => 1, 
    ); 

    my $label = $win->add(
     'label', 'Label', 
     -width   => -1, 
     -paddingspaces => 1, 
     -text   => 'Time:', 
    ); 
    $cui->set_binding(sub { exit(0); } , "\cC"); 

    # I want this to loop every second 
    $label->text("Random: " . int(rand(10))); 
    sleep(1); 

    $cui->mainloop(); 

} 

myProg(); 

나는 결국 정기적으로 변경됩니다 꽤 많은 레이블이하고하고 싶으면,

# I want this to loop every second 
    $label->text("Random: " . int(rand(10))); 
    sleep(1); 

레이블에 임의의 숫자를두기의 아이디어는 작동 보여 그냥 :이 부분은 반복적으로 실행하려면 다른 기능도 있습니다.

내가 일을 시도했다 :

while (1) { 
    ... 
} 

을하지만 난)합니다 (주회 돌이하기 전에이 작업을 수행하는 경우; 창은 결코 생성되지 않으며 호출 후에는 아무것도 수행하지 않는다는 것을 알 수 있습니까?

희망이 있으십니까? 그러면 어떻게해야합니까?

답변

5

Curses는 주 루프를 실행하고 이전에 설정 한 콜백을 통해 제어권 만 반환하면 프로그램의 실행 흐름을 대신 수행합니다. 이 패러다임에서 sleep() 루프를 사용하여 시간 종속적 인 작업을 수행하지 않으면 정기적으로 업데이트를 요청하는 메시지가 표시됩니다.

제 (미등록) Curses::UI 타이머를 통해, 그냥 작업을 수행하는 프로그램을 구조 조정 :

#!/usr/bin/env perl 

use strict; 
use Curses::UI; 

local $main::label; 

sub displayTime { 
    my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(); 
    $main::label->text("Time: $hour:$minute:$second"); 
} 

sub myProg { 
    my $cui = new Curses::UI(-color_support => 1); 

    my $win = $cui->add(
     "win", "Window", 
     -border => 1, 
    ); 

    $main::label = $win->add(
     'label', 'Label', 
     -width   => -1, 
     -paddingspaces => 1, 
     -text   => 'Time:', 
    ); 
    $cui->set_binding(sub { exit(0); } , "\cC"); 
    $cui->set_timer('update_time', \&displayTime); 


    $cui->mainloop(); 

} 

myProg(); 

당신이 당신의 시간 제한을 변경해야하는 경우는, set_timer도 추가 인수로 시간을 받아들입니다. 관련 함수 enable_timer, disable_timer, delete_timer.

출처 : http://cpan.uwinnipeg.ca/htdocs/Curses-UI/Curses/UI.pm.html#set_timer-