Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

after и преимущества

0 views
Skip to first unread message

Nick Kostirya

unread,
Oct 6, 2006, 2:51:10 AM10/6/06
to
Привет.

Необходимо написать некий GUI, который будет использовать uft8.

Думал на перле, но у perl-tk есть некоторые проблемы с uft8, в частности в заголовке окна не понимает uft8.
Возможно есть и другие.
Смотрел в сторону use Tcl::Tk; - заголовок отображается нормально. :-)

Но если интерпретатор tcl и так используется, почему бы на написать этот простенький графический интерфейс на самом tcl?

В связи с этим возник вопрос по поводу after.
В http://humgat.org/~kittle/mailarchive/hints/0335.html Victor Wagner упомянул,
что "если нужно сделать что-то долгое из обработчика события, используйте команду after".

В доке написано, что after выполняет команду в фоновом режиме.
А как достигается это фоновое выполнение?
Создается еще одна копия интерпретатора или используются легковесные потоки?

Вот думаю теперь, над преимуществами tcl для GUI (перед тем же perl-tk),
и ищу у google как устроен изнутри механизм tcl для обработки after команд!

Ilya Anfimov

unread,
Oct 6, 2006, 6:01:19 AM10/6/06
to
2006-10-06, Nick Kostirya <ni...@han.kherson.ua> пишет:

> Привет.
>
> Необходимо написать некий GUI, который будет использовать uft8.
>
> Думал на перле, но у perl-tk есть некоторые проблемы с uft8, в частности в заголовке окна не понимает uft8.
> Возможно есть и другие.
> Смотрел в сторону use Tcl::Tk; - заголовок отображается нормально. :-)
>
> Но если интерпретатор tcl и так используется, почему бы на написать этот простенький графический интерфейс на самом tcl?
>
> В связи с этим возник вопрос по поводу after.
> В http://humgat.org/~kittle/mailarchive/hints/0335.html Victor Wagner упомянул,
> что "если нужно сделать что-то долгое из обработчика события, используйте команду after".
>
> В доке написано, что after выполняет команду в фоновом режиме.

Странная дока. Обычно написано, что after выполняет команду
через несколько секунд или когда нет задач (по выбору вызывающего).
Никакого фонового режыма нет -- всё остальное блокируется пока
вызван обработчик из after.

Nick Kostirya

unread,
Oct 6, 2006, 6:59:20 AM10/6/06
to


http://www.tcl.tk/man/tcl8.4/TclCmd/after.htm
This command is used to delay execution of the program or to execute a command in background sometime in the future.
Может не понял правильно?

--
With best regards. Nick I. Kostirya.
email: nikolay [dot] kostirya [at] webceo [dot] ks [dot] ua
icq: 105678939

Ilya Anfimov

unread,
Oct 6, 2006, 10:11:35 AM10/6/06
to
2006-10-06, Nick Kostirya <ni...@han.kherson.ua> пишет:
> On Fri, 6 Oct 2006 10:01:19 +0000 (UTC)
> Ilya Anfimov <il...@astelecom.ru> wrote:
>
>> 2006-10-06, Nick Kostirya <ni...@han.kherson.ua> пишет:
>> > Привет.
>> >

[skipped]

>
> http://www.tcl.tk/man/tcl8.4/TclCmd/after.htm
> This command is used to delay execution of the program or to execute a command in background sometime in the future.
> Может не понял правильно?

Понял -- неправильно. Потому, что коряво написано.

Там тот background, который из cooperative multitasking

>
>
>

Victor Wagner

unread,
Oct 6, 2006, 1:13:31 PM10/6/06
to
Nick Kostirya <ni...@han.kherson.ua> wrote:
NK> Привет.
NK> долгое из обработчика события, используйте команду after".
NK> В доке написано, что after выполняет команду в фоновом
NK> режиме. А как достигается это фоновое выполнение?

NK> Создается еще одна копия интерпретатора или используются
NK> легковесные потоки?


Ни то, и ни другое. Просто выполнение того, что указано во втором
аргументе команды after помещается в очередь событий (и соответственно,
может быть до него обработать другие события.

Для того чтобы с помощью after делать что-нибудь долгое, нужно это
долгое поделить на маленькие кусочки и запускать каждый следующий из
предыщущего через after.

Альтернативный вариант - иметь единый кусок, который периодически
(весьма часто) дергает update чтобы обработать поступившие события.

Но вообще в современном Tcl (если он собран с поддержкой нитей), можно и
легковесный поток с отдельным интерпретатором в нем завести
(интерпретатор Tcl в данном случае - это не процесс, а структура данных внутри процесса - см документацию на команду interp).

Для работы с нитями используется расширение Thread.

--

Nick Kostirya

unread,
Oct 9, 2006, 2:15:49 AM10/9/06
to
Всем спасибо, разобрался.

Сделал пару экспериментов.
За одно узнал, что если по vwait переменная будет определена, то другие команды atfer могут и не выполниться.

0 new messages