Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Alan Long                            2:5030/1082.72 26 Jan 2001  07:49:50
 To : All
 Subject : Q: Perl/Tk
 -------------------------------------------------------------------------------- 
 
 * Originally from Alan Long (2:5030/1082.72) to All.
 
  AL> Вот тут потребовалось вывести маленький график с использованием
  AL> Perl/Tk... В Perl/Tk, как впрочем и в Tcl/Tk я не силен, так что
  AL> решил спросить здесь... 
 
  AL> Задача - вывести небольшой (60x60) график с network activity
  AL> (Данные я беру с SNMP) Вызов примерно следующий:
  AL> DrawStat( $image, $inCPS, $outCPS, $maxCPS ), где:
  AL> $image - какой-то объект куда выводится график;
  AL> $inCPS - число в диапазоне 0..$maxCPS, характерезующее входной
  AL> поток $outCPS - число в диапазоне 0..$maxCPS, характерезующее
  AL> выходной поток $maxCPS - Максимальное значение CPS на интерфейсе...
 
  AL> Куда смотреть, какие доки читать на предмет отрисовки...
 
 Вот тут сочинил, но что-то слишком много процессорного времени ест, может кто
 чего пооптималнее присоветует ?
 В данном примере данные берутся не с интрефейса а из rand ;-) Hо смысла это не
 меняет.. При работе на процессоре P-130, загрузка составляет (load avg.) 0.2,
 что для данной задачи многовато, IMHO.
 - --
 #!/usr/bin/perl -w
 
 use     strict;
 use     Tk;
 
 my      $m      = undef;
 my      $c      = undef;
 my      $width  = 60;
 my      $height = 60;
 my      $max_val= 4500;
 my      $delay  = 2;
 
 my      @y_val  = ();
 my      @x_val  = ();
 
 {
         srand( time() );
 
         $m = MainWindow->new;
         $c = $m->Canvas(
                 -width          => $width,
                 -height         => $height,
                 -background     => 'gray',
         );
 #       $c->createGrid(
 #               10, 10,
 #               20, 20,
 #               -disabledcolor  => 'blue',
 #       );
         $c->pack(
                 -expand         => 1,
                 -fill           => 'both',
         );
         process();
         MainLoop;
 }
 
 sub draw_line {
         my      ( $a_ptr, $color)       = ( shift, shift );
 
         $c->createLine(
                 map {
                     $_,
                     int( ($a_ptr->[$_] / $max_val) * $width )
                 } ( 1..$#$a_ptr );
                 -fill           => $color,
 #               -smooth         => 1,
         );
 }
 
 sub process {
         my_push( \@y_val, $width, int rand( $max_val ) );
         my_push( \@x_val, $width, int rand( $max_val ) );
         
         # Clear old graph
         $c->createRectangle(
                 0,0,
                 $width,$height,
                 -fill      => 'black',
         );
         draw_line( \@y_val, 'red' );
         draw_line( \@x_val, 'green' );
         
         $SIG{ALRM} = \&process;
         alarm( $delay );
 }
 
 sub my_push {
         my      ( $a_ptr, $max_len ) =  ( shift, shift );
         local   $_;
 
         foreach ( @_ ) {
                 shift @$a_ptr
                         if( $#$a_ptr >= $max_len );
                 push( @$a_ptr, $_ );
         }
 }
 - --
 
 P.S.
 что-то указанный фрагмент (создание сетки) не работает, может я чего не
 правильно делаю ?
        $c->createGrid(
                10, 10,
                20, 20,
                -disabledcolor  => 'blue',
        );
  
 -- 
 With best,
      Ъ-·    Ъ
      Е-ЧLaі\і <alan@x-rays.eu.org>
 
 --- timEd/386 1.10+
  * Origin: X - Rays Station (2:5030/1082.72)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Q: Perl/Tk   Alan Long   25 Jan 2001 15:13:58 
 Q: Perl/Tk   Alan Long   26 Jan 2001 07:49:50 
 Q: Perl/Tk   Oleg Nevedomsky   27 Jan 2001 14:17:24 
 Re: Q: Perl/Tk   Artem Chuprina   29 Jan 2001 13:59:46 
 Q: Perl/Tk   Roman Veretelnikov   30 Jan 2001 17:03:50 
Архивное /ru.perl/4581a70f5f70.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional