OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 14 Ноябрь, 2019 00:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: i21SysCalls
СообщениеДобавлено: Воскресенье, 28 Февраль, 2016 13:31 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Народ, вот такая задача. Надо включить в сборку Центра базовую возможность открывать ссылки.

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 28 Февраль, 2016 17:27 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Иван Денисов писал(а):
Пишу тут на форуме с расчетом на то, что опыт есть у всех. Какие проблемы у кого были без Services.Actions?

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 28 Февраль, 2016 18:34 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Идея с отдельным потоком хорошая. Надо попробовать.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 28 Февраль, 2016 21:44 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Иван Денисов писал(а):
Идея с отдельным потоком хорошая. Надо попробовать.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Вторник, 01 Март, 2016 21:35 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Вот решение с потоками получилось
http://blackboxframework.org/unstable/i ... a1.445.zip

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 06 Март, 2016 08:35 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Дуг Данфорд предложил Start переименовать в Run, с чем согласился Цинн. Думаю такое название тоже вполне логичное. Так что вот новая версия.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 20 Март, 2016 13:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Иван Денисов писал(а):
Дуг Данфорд предложил Start переименовать в Run, с чем согласился Цинн. Думаю такое название тоже вполне логичное.
Автора-то известили хотя бы.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 20 Март, 2016 19:03 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2430
Info21 писал(а):
Там внутри HostDialog.Start -- поэтому и было Start. Тоже вполне логично.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: i21SysCalls
СообщениеДобавлено: Воскресенье, 20 Март, 2016 19:28 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Иван Денисов писал(а):
Info21 писал(а):
Там внутри HostDialog.Start -- поэтому и было Start. Тоже вполне логично.

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

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB