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/ |