OberonCore
https://forum.oberoncore.ru/

i21SysCalls
https://forum.oberoncore.ru/viewtopic.php?f=47&t=5629
Страница 1 из 1

Автор:  Иван Денисов [ Воскресенье, 28 Февраль, 2016 13:31 ]
Заголовок сообщения:  i21SysCalls

Народ, вот такая задача. Надо включить в сборку Центра базовую возможность открывать ссылки.

Последняя версия такого решения в подсистеме i21Sys. И там сделан запуск через Actions. Как я понимаю, такое решение основано на опыте использования ранних версий.

Евгений, это Вы ведь делали такой запуск? В комментарии написано так:
(* запуск через Action, т.к. иначе ББ не может выполнять другие команды до завершения запуска EXE. *)

Помогите этот опыт как-то описать...
http://forum.blackboxframework.org/view ... t=10#p3267

Пишу тут на форуме с расчетом на то, что опыт есть у всех. Какие проблемы у кого были без Services.Actions?

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2016 17:27 ]
Заголовок сообщения:  Re: i21SysCalls

Иван Денисов писал(а):
Пишу тут на форуме с расчетом на то, что опыт есть у всех. Какие проблемы у кого были без Services.Actions?

Пользуюсь Total Commander. Иногда при запуске программы или открытии файла Total Commander "подвисает" на то время, пока раскручивается диск, идёт доступ в сеть или ещё что-то подобное происходит.

Чтобы избежать такой проблемы, т.е. чтобы задержка запуска стороннего приложения не тормозила родительский процесс, достаточно вынести команду запуска (будь то вызов CreateProcess или что-то другое) в отдельный тред. Тогда все тормоза достанутся тому треду, а UI основного приложения останется отзывчивым, и можно будет делать что-то дальше, пока документ открывается или процесс запускается в фоне.

В BlackBox Services.Action выполняется в том же треде, что и всё остальное, поэтому не является полноценным решением. Лучше было бы запускать отдельный тред наподобие KeyboardWatcher, единственной работой которого был бы вызов CreateProcess с нужными параметрами, после чего тред бы завершался.

Автор:  Иван Денисов [ Воскресенье, 28 Февраль, 2016 18:34 ]
Заголовок сообщения:  Re: i21SysCalls

Идея с отдельным потоком хорошая. Надо попробовать.

Как я понимаю, Services.Action дают довыполниться хотя-бы тем процедурам, которые идут "слитно", то есть — до обработки следующих событий. Как-никак все же большая "консистентность"...

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2016 21:44 ]
Заголовок сообщения:  Re: i21SysCalls

Иван Денисов писал(а):
Идея с отдельным потоком хорошая. Надо попробовать.

Как я понимаю, Services.Action дают довыполниться хотя-бы тем процедурам, которые идут "слитно", то есть — до обработки следующих событий.

Да, это так. При таком решении клик по ссылке не оставит UI подвисшим в состоянии "ссылка нажата", текущая команда закончит все прорисовки. Просто вы не сможете кликнуть следующую ссылку (или пойти в меню, переключиться между документами и т.п.), пока не закончится запуск предыдущей, вот и всё.

Автор:  Иван Денисов [ Вторник, 01 Март, 2016 21:35 ]
Заголовок сообщения:  Re: i21SysCalls

Вот решение с потоками получилось
http://blackboxframework.org/unstable/i ... a1.445.zip

Господа, поглядите HostDialog. Нет ли там ошибки в Start и Open ?

Автор:  Иван Денисов [ Воскресенье, 06 Март, 2016 08:35 ]
Заголовок сообщения:  Re: i21SysCalls

Дуг Данфорд предложил Start переименовать в Run, с чем согласился Цинн. Думаю такое название тоже вполне логичное. Так что вот новая версия.

http://blackboxframework.org/unstable/i ... a1.446.zip

Я совсем не специалист в потоках, поэтому просто скопировал реализацию создания потока из Kernel.InstallKeyboardInt. Возможно, в случае запуска процессов надо какие-то другие параметры задавать для потоков? Кто-то имел опыт работы с потоками?

Автор:  Info21 [ Воскресенье, 20 Март, 2016 13:21 ]
Заголовок сообщения:  Re: i21SysCalls

Иван Денисов писал(а):
Дуг Данфорд предложил Start переименовать в Run, с чем согласился Цинн. Думаю такое название тоже вполне логичное.
Автора-то известили хотя бы.

Там внутри HostDialog.Start -- поэтому и было Start. Тоже вполне логично.

Автор:  Иван Денисов [ Воскресенье, 20 Март, 2016 19:03 ]
Заголовок сообщения:  Re: i21SysCalls

Info21 писал(а):
Там внутри HostDialog.Start -- поэтому и было Start. Тоже вполне логично.

Я поначалу хотел убрать HostDialog.Start, но Джозеф для обратной совместимости настоял на сохранении этой процедуры, которая теперь стала оберткой для Dialog.Run.

Вот последняя версия с запуском в потоках:
http://blackboxframework.org/unstable/i ... a1.464.zip

Автор:  Info21 [ Воскресенье, 20 Март, 2016 19:28 ]
Заголовок сообщения:  Re: i21SysCalls

Иван Денисов писал(а):
Info21 писал(а):
Там внутри HostDialog.Start -- поэтому и было Start. Тоже вполне логично.

Я поначалу хотел убрать HostDialog.Start, но Джозеф для обратной совместимости настоял на сохранении этой процедуры, которая теперь стала оберткой для Dialog.Run.

Вот последняя версия с запуском в потоках:
http://blackboxframework.org/unstable/i ... a1.464.zip

Понял, спасибо, но надо всё проще :)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/