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

Поиск:

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


Шустрый
*


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

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



есть вот такой простенький код
Код

use strict;
use Win32::GUI;

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

sub Main_Terminate() {
    print "Main window terminated\n";
    return -1;
}

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

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

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

$main->Show();

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

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

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

Win32::GUI::DoEvents();
Win32::GUI::Dialog();

Задача такая надо чтобы в тексовых полях 1 и 2 обновлялялись данные не зависимо друг от друга, но с разной задержкой и при это чтобы в текстовом поле 3 можно было без лагов и задержок чегото набирать
Почему то у меня висне пообще все окно программы и обновляеться только 1 первое текстовое поле
Подскажите как выйти из ступора и заставить выполнять разные куски кода с разной хадержкой и при этом не вгонять в ступор главнй интерфейс программы
PM MAIL   Вверх
wolter
Дата 4.2.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну неужели никто не знает решение данной проблеммы решаемой на Перл? smile  smile  smile 
PM MAIL   Вверх
wolter
Дата 4.2.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



люди ну кто нить ПОМОГИТЕ !!! smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
vadiml
Дата 4.2.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



тут очень мало кто использует win32

попробуй тоже самое сделать на С и сверь результат

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


Шустрый
*


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

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



Ой спасибо,неужели вы думатет что если бы у меня был выбор на чем писать я бы писал на перл !?
PM MAIL   Вверх
shamber
Дата 5.2.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



wolter, А вот у меня есть выбор и я пишу на perl smile
PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 5.2.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 

Дорогой друг! тут дело не в перле, а многопоточности.
По только что прочитанному мануалу по Tk надо делать так:
1) посоздавать всяких окон и т.п.
2) запусить MainLoop();  # прямо так по ходу и называется

GUI работает как - Tk генерирует события, например нажата кнопка, или введен символ в 
ваш RichEdit (тоже кнопка =)) и потом вызывает обработчики  , написанные вами.


писать циклы типа

Код

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

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


бессмысленно, потому что
а) обработка eventов GUI будет происходить раз в 3 секунды (мило, да ?)
б) второй цикл никогда не будет запущен (без комментариев)

Лучше сделать так
1) либо завести отдельный thread(или даже 2 - по одному на textbox), который будет обновлять ваши textbox
2) либо (не знаю как делать это в Perl /Tk) переопределить функцию отрисовки, в которой
будет в каждый момент выводиться нужное число. хотя вариант 1 все таки лучше.

3) подумать, а что же вам действительно нужно.. просто не вижу способа применить такие textbox.
возможно их нужно обновлять не постоянно, а например при вводе данных в richedit ? тогда имеет смысл повесить
обработчик на textbox


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
KSURi
Дата 5.2.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(sir_nuf_nuf @  5.2.2008,  10:43 Найти цитируемый пост)
1) либо завести отдельный thread(или даже 2 - по одному на textbox), который будет обновлять ваши textbox

Tk, наскольк я знаю, имеет статус thread unsafe, так что врядли такой финт получится (я как-то пробовал, но сильно не заморачивался). Хотя по здравому смыслу - это самое правильное решение имхо.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
wolter
Дата 5.2.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(sir_nuf_nuf @ 5.2.2008,  10:43)
smile 
Лучше сделать так
1) либо завести отдельный thread(или даже 2 - по одному на textbox), который будет обновлять ваши textbox
2) либо (не знаю как делать это в Perl /Tk) переопределить функцию отрисовки, в которой
будет в каждый момент выводиться нужное число. хотя вариант 1 все таки лучше.

3) подумать, а что же вам действительно нужно.. просто не вижу способа применить такие textbox.
возможно их нужно обновлять не постоянно, а например при вводе данных в richedit ? тогда имеет смысл повесить
обработчик на textbox

Полностью согласен с вориантом 1, содержымое текстовых полей долно обновляться постоянно  с момента запуска программы и до ее завершения, но это делать они должны независимо друг от друга(я не когда не работал с многопочностью, поэтому буду искренне благодарен за пример smile )
цыклы while, були указанны как пример.

Добавлено через 4 минуты и 39 секунд
Люди причем тут Tk это все реализаванно пи помощи Win32::GUI
PM MAIL   Вверх
PanamOS
Дата 5.2.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(wolter @  5.2.2008,  14:53 Найти цитируемый пост)
Люди причем тут Tk это все реализаванно пи помощи Win32::GUI 

Tk привели лишь как пример, для Win32::GUI надо смотреть документацию или просто пробовать. В Wx это точно реализуемо. На сайте есть демо-примеры, где показано как это использовать.
PM MAIL   Вверх
wolter
Дата 5.2.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



PanamOS,  А можно прямой линк на этот пример ?
PM MAIL   Вверх
PanamOS
Дата 5.2.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



wolterтут
Но перед этим установите себе Wx. Cсылку где его можно скачать я давал выше.
PM MAIL   Вверх
PanamOS
Дата 5.2.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что-то мне подсказывает, что Win32::GUI::Timer сгодиться.
PM MAIL   Вверх
vadiml
Дата 5.2.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



неужели вы думате что если бы у меня был выбор на чем писать я бы писал на перл

я что-то сделал не так, когда несколько лет назад САМ взялся за перл? smile

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


Шустрый
*


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

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



Цитата(vadiml @  5.2.2008,  16:33 Найти цитируемый пост)
я что-то сделал не так, когда несколько лет назад САМ взялся за перл? smile

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


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

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


 




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


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

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