Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 окт 2024, 08:37

Прерывание "вечного цикла" фонового задания

Автор Asilkhan, 28 ноя 2018, 09:47

0 Пользователей и 1 гость просматривают эту тему.

Asilkhan

Все привет.
Конфигурация самописная. Управляемые формы.
Есть задача по отображению вычислений на форме, без блокировки формы. Почитав статьи по теме фоновые задания, реализовал этот момент.
Реализация такая: на форме по нажатию кнопки стартует фоновое задание(пускаем Процедуру Счет из общего модуля), запускается обработчик ожидания, который ловит результаты вычислений от процедуры Счет общего модуля. Все работает как надо, вычисления идут, обработчик ловит результаты, показывает на форме и все это без блокировки интерфейса.
Но есть загвоздка по прерыванию процедуры Счет. Внутри запускается "вечный цикл", теперь вопрос, как в этот цикл передать булевый параметр для остановки цикла?
Надеюсь понятно изложил.

alex0402

Цитата: Asilkhan от 28 ноя 2018, 09:47Внутри запускается "вечный цикл", теперь вопрос, как в этот цикл передать булевый параметр для остановки цикла?

через константу, например.
Спасибо за Сказать спасибо

LexaK

какие циклы? простой создайте на форме кнопку: Остановить фоновое задание, с кодом

лкЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(фзКод);
лкЗадание.Отменить();

если помогло нажмите: Спасибо!

Asilkhan

Цитата: LexaK от 28 ноя 2018, 10:00
какие циклы? простой создайте на форме кнопку: Остановить фоновое задание, с кодом

лкЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(фзКод);
лкЗадание.Отменить();

При описании я упростил задачу, на самом деле фоновое задание запускает процедуру общего модуля, в которой идет работа с COM объектом, считывание данных с порта, внутри "вечного цикла". На форме обработчик ожидания ловит эти данные.
Теперь я хочу прервать цикл по событию из формы, чтобы после "вечного цикла" освободить COM объект.

Процедура ГлобальноеЧтениеПорта(Адрес) Экспорт
    МойОбъект = Новый COMОбъект("HowToComObjectFor1C.MyClass");
Если МойОбъект.openPort(19200,"COM9") Тогда
Пока УсловиеВыхода  Цикл
//сюда хочу передавать Условие выхода для прерывания цикла
Старт = ИзвлечьВес(МойОбъект.getData()) ;
ПоместитьВоВременноеХранилище( Новый Структура("Инд,Конец", Старт,Ложь), Адрес);
КонецЦикла;
КонецЕсли;
МойОбъект.closePort();
КонецПроцедуры

LexaK

и что? отмените фоновое задание, СОМ объект освободится автоматом!
если помогло нажмите: Спасибо!

Asilkhan

Цитата: LexaK от 28 ноя 2018, 10:30
и что? отмените фоновое задание, СОМ объект освободится автоматом!
Неделю назад пробовал так делать и не работало.
Сейчас еще раз убил фоновое задание и действительно объект освободился. Пора сделать перерыв.
Спасибо большое, LexaK
Добавлено: 28 ноя 2018, 20:04


Рано обрадовался. По нажатию на кнопку я могу закрывать фоновые задания. А вот при закрытии программы не получается. Ругается на запуск серверных процедур.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск