Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Возврат управления граф. интерфейсу в Perl |

06.09.2009, 00:58
|
|
Новичок
Регистрация: 22.06.2008
Сообщений: 22
Провел на форуме: 77488
Репутация:
2
|
|
Возврат управления граф. интерфейсу в Perl
Есть программа на перле использующая TK
По нажатию на кнопку запускается подпрограмма в теле которой
например лежит алгоритм поиска определённого слова в файлах хранящихся на винте
При нахождении совпадения подпрограмма пишет в текстбокс
имя и путь к этому файлу
Проблема в том после запуска этой самой подпрограммы кнопка залипает, окно становится недоступным и приходится ждать завершения подпрограммы
Как сделать так, что бы эта подпрограмма выполнялась прозрачно не отнимая управление у окна?
|
|
|

06.09.2009, 01:45
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Например fork заюзать, либо вызывать $main_window->update по ходу поиска
|
|
|

06.09.2009, 02:23
|
|
Новичок
Регистрация: 22.06.2008
Сообщений: 22
Провел на форуме: 77488
Репутация:
2
|
|
Если попадается большой файл $main_window->update не катит поскольку на время поиска в этом файле управление всё равно отнимается.
Можно про fork подробнее? Неплохо бы пример
|
|
|

06.09.2009, 02:33
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Код:
#!/usr/bin/perl
use strict;
use Tk;
my $mw = MainWindow->new;
$mw->geometry("220x150");
$mw->Button(
-text => "Sleep",
-command => \&action,
)->pack;
MainLoop;
sub action {
my $chld = fork();
if ($chld == 0)
{
while(1)
{
print 123;
sleep 1;
}
}
else
{
return
}
}
|
|
|

06.09.2009, 03:07
|
|
Новичок
Регистрация: 22.06.2008
Сообщений: 22
Провел на форуме: 77488
Репутация:
2
|
|
Работает, но как теперь послать окну инфу?
Например:
Код:
#!/usr/bin/perl
use Tk;
use Tk::ROtext;
$mw = MainWindow->new;
$mw->geometry("400x400");
$print = $mw->Scrolled('ROText',-scrollbars=>'e',-height=>22,-width=>45)->pack();
$mw->Button(
-text => "Sleep",
-command => \&action,
)->pack;
MainLoop;
sub action {
$chld = fork();
if ($chld == 0)
{
while(1)
{
$print->insert('end',"123");
sleep 1;
}
}
else
{
return
}
А то ошибка
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|