Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос для ГУРУ Perl 
:(
    Опции темы
wolter
Дата 5.2.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Люди ну есть кто знает покажите пример
главное окно программы
в ней 2 текстовых поля
в первов обновляються данный с задержкой 3 сек
во втором с задержкой 5 
независемо друг от друга smile  smile  smile  smile 

PM MAIL   Вверх
wolter
Дата 5.2.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Вот, нашел, и всегото делов

Код

#!/usr/bin/perl
use strict;
use Win32::GUI;
use threads;

my $main = Win32::GUI::Window->new(
    -name    => "Main",
    -title   => "Win32-GUI: Doevents-Demo",
    -left    => 100,
    -top     => 100,
    -width   => 200,
    -height  => 130,
  );



my $textfield1 = $main->AddTextfield(
    -name   => "Textfield1",
    -text   => "Text field 1",
    -left   => 0,
    -top    => 1,
    -width  => 100,
    -height => 20,
    -readonly => 0,
);

my $textfield2 = $main->AddTextfield(
    -name   => "Textfield2",
    -text   => "Text field 2",
    -left   => 0,
    -top    => 20,
    -width  => 100,
    -height => 20,
    -readonly => 0,
);

my $textfield3 = $main->AddRichEdit(
    -name   => "Textfield3",
    -text   => "Text field 3",
    -left   => 0,
    -top    => 40,
    -width  => 200,
    -height => 60,
    -readonly => 0,
);

$main->Show();

my $con1 = 0;
my $con2 = 0;

my $thread  = threads->create(\&rr);
my $thread2  = threads->create(\&rr2);

Win32::GUI::DoEvents();
Win32::GUI::Dialog();
$thread->join;


sub rr{
while (1) {
$con1++;
$textfield1->Text("Text field1 $con1");
Win32::GUI::DoEvents() >= 0 or die "Window was closed during processing";
sleep (1);
 }
}

sub rr2{
while (1) {
$con2++;
$textfield2->Text("Text field2 $con2");
Win32::GUI::DoEvents() >= 0 or die "Window was closed during processing";
sleep (5);
 }
}

sub Main_Terminate() {
    print "Main window terminated\n";
    $thread->detach();
    $thread2->detach();
    return -1;
}

PM MAIL   Вверх
Ramirez
Дата 7.2.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



эээ.... а зачем такие сложности? можно было просто в один while со sleep 1 сек все положить. и просто на каждом третьем проходе обновлять 1 поле на каждом пятом 2-е поле.... и евенты раз в секунду будут обрабатываться, что сведет лаги к минимуму....

а если у вас 10 полей будет, что 10 тредов? Круто, я уже себе представляю, если бы в win на каждый обновляемый элемент интерфейса тред создавался, мы бы все сейчас сидели бы за 10-процессорными машинами с терабайтами памяти, наверное... =)

Это сообщение отредактировал(а) Ramirez - 7.2.2008, 11:08
PM ICQ   Вверх
wolter
Дата 8.2.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



Ramirez
А можно пример в студию!!!
PM MAIL   Вверх
shamber
Дата 8.2.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



wolter
примерно так

Код




my $count = 0; 

while (1) {
 if ( $count ==3) { #если мы тут то значит это 3 секунда
     $con1++
     $textfield1->Text("Text field1 $con1");
     Win32::GUI::DoEvents() >= 0 or die "Window was closed during processing";
}elsif( $count ==5){ #если мы тут то значит это 5 секунда
         $con2++
     $textfield2->Text("Text field1 $con2");
     Win32::GUI::DoEvents() >= 0 or die "Window was closed during processing";
$count =0; # сбрасываем счетчик :)
}else{#иначе просто увеличиваем.
      $count++;
}
sleep (1);#использование sleep не самый лучший вариант.
 }


писал прямо в форум. Win32::Gui не ставил потому не проверял. А так Все же начните думать а не просто copy-paste. Это не приведет к результатам.
PM MAIL Jabber   Вверх
wolter
Дата 8.2.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber,  smile  Попробуй вот то что Вы написали приминить конкретно к моей задаче, и посмотрите что у Вас получиться.
PM MAIL   Вверх
shamber
Дата 11.2.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



wolter
ну запустите в отдельном треде smile и посмотрите smile а если отдельный тред не хочется ищите как избавиться от 
Код

sleep(1)
.

PM MAIL Jabber   Вверх
shamber
Дата 11.2.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



Код

#!/usr/bin/perl
use strict;
use Win32::GUI();

my $interval = 3000; #время в мс, т.е 3 секунды
my $interval2 = 5000;

my $main = Win32::GUI::Window->new(
    -name    => "Main",
    -title   => "Win32-GUI: Timers",
    -left    => 100,
    -top     => 100,
    -width   => 200,
    -height  => 130,
    -onTimer => \&redraw_Timer, #указываем, какую процедуру вызывать при срабатывании таймера
  );

my $textfield1 = $main->AddTextfield(
    -name   => "Textfield1",
    -text   => "Text field 1",
    -left   => 0,
    -top    => 1,
    -width  => 100,
    -height => 20,
    -readonly => 0,
);

my $textfield2 = $main->AddTextfield(
    -name   => "Textfield2",
    -text   => "Text field 2",
    -left   => 0,
    -top    => 20,
    -width  => 100,
    -height => 20,
    -readonly => 0,
);

my $textfield3 = $main->AddRichEdit(
    -name   => "Textfield3",
    -text   => "Text field 3",
    -left   => 0,
    -top    => 40,
    -width  => 200,
    -height => 60,
    -readonly => 0,
);


my $con1 =1;
my $con2 = 1;

 #создаем два таймера и называем их уникальными именами, чтобы в будущем определять какой таймер сработал
$main->AddTimer( "first", $interval);
$main->AddTimer( "second", $interval2);


$main->Show();


Win32::GUI::Dialog();

sub Main_Terminate {
        -1;
}

sub redraw_Timer{
        my $self = shift;
# получаем имя таймера.
        my $timer_name = shift;
#выбираем что делать :)
        if ($timer_name eq 'first'){
            $con1++;
            $textfield1->Text("Text field $con1");
        }elsif($timer_name eq 'second'){
            $con2++;
            $textfield2->Text("Text field2 $con2");
        }
}



Пользуйте, проверяйте. Как видите без sleep и тредов.
З.Ы. пришлось Win32::GUI ставить smile
З.З.Ы тему можно переименовать чтобы в будущем людям искать проще было smile

Это сообщение отредактировал(а) shamber - 11.2.2008, 13:36
PM MAIL Jabber   Вверх
wolter
Дата 25.2.2008, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 28.1.2008

Репутация: нет
Всего: нет



shamber,  Этоже гениально smile  smile  smile  Огромное спасибо, я просто както раньше в этот не заглядывал
PM MAIL   Вверх
shamber
Дата 26.2.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



wolter, всегда пожалуйста. smile
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.