Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: GUI > Curses::UI: медленная работа


Автор: n4n0bit 1.12.2009, 13:31
Мой сценарий делает некую работу, в результате которой получается некий результат, который я хочу смотреть через элемент TextViewer модуля Curses::UI. Этих результатов может быть до 50 и более. Когда скажем в хеше есть 30 результатов который я хочу просмотреть, 1 по 15 просматривается без тормозов (PageUP/PageDown переключение, Ctrl+Q выход), но далее при переключении заметные тормоза. Ниже приведена тестовая модель кода:

Код

#!/usr/bin/perl
use strict;
use warnings;

use Curses::UI;

# <VARS>
my $req_num = 50; # кол-во запросов
my %win; # окна -;)
my %txt; # текст -;)
my %tmp; # вспомогательный хеш
my $data = 'A' x 4096;
# </VARS>

$tmp{c} = 0;


my $cui = Curses::UI->new( -mouse_support => 0, -debug => 0, -clear_on_exit => 1 );
$win{0} = $cui->add(undef, "Window", -border => 1, -y => 1, -title => $win{0}, -width => 120, -height => 33, -centered => 1 );

foreach my $n(0..$req_num)
{
    $txt{$n} = $win{0}->add( undef, "TextViewer", -text => "$n$data", -border => 1, -title => "Loop # $n" );
}

$cui->set_binding(\&next_win_res, "339");
$cui->set_binding(\&prev_win_res, "338");
$cui->set_binding( sub {exit 0;}, "\cQ");

$win{0}->focus();
$cui->mainloop();

### eof ###

sub next_win_res()
{
    $tmp{c}++;
    $tmp{c} = 0 if $tmp{c} > $req_num-1; 
    $txt{$tmp{c}}->focus;
}

sub prev_win_res()
{
    $tmp{c}--;
    $tmp{c} = $req_num-1 if $tmp{c} < 0;
    $txt{$tmp{c}}->focus;
}


ps: можно ли избежать этих тормозов другой реализацией кода? или это хронически для этого модуля.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)