Необходимо написать некий 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 команд!
Странная дока. Обычно написано, что after выполняет команду
через несколько секунд или когда нет задач (по выбору вызывающего).
Никакого фонового режыма нет -- всё остальное блокируется пока
вызван обработчик из after.
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
[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
>
>
>
Ни то, и ни другое. Просто выполнение того, что указано во втором
аргументе команды after помещается в очередь событий (и соответственно,
может быть до него обработать другие события.
Для того чтобы с помощью after делать что-нибудь долгое, нужно это
долгое поделить на маленькие кусочки и запускать каждый следующий из
предыщущего через after.
Альтернативный вариант - иметь единый кусок, который периодически
(весьма часто) дергает update чтобы обработать поступившие события.
Но вообще в современном Tcl (если он собран с поддержкой нитей), можно и
легковесный поток с отдельным интерпретатором в нем завести
(интерпретатор Tcl в данном случае - это не процесс, а структура данных внутри процесса - см документацию на команду interp).
Для работы с нитями используется расширение Thread.
--
Сделал пару экспериментов.
За одно узнал, что если по vwait переменная будет определена, то другие команды atfer могут и не выполниться.