Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/147: Рейтинг темы: голосов - 147, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208

7.7 Обработка Ожидания

01.03.2012, 11:11. Показов 29693. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Столкнулась с такой проблемой: необходимо с разным интервалом времени вызывать две процедуры из глобального модуля. Если разместить две ОбработкаОжидания(), выполняется только вторая. Как быть?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2012, 11:11
Ответы с готовыми решениями:

Курсор ожидания c#
День добрый, подскажите как реализовать данную фичу, что то сам догнать не могу: что бы при запуске программы был курсор ожидания, но что...

Страница ожидания
Здравствуйте. при заходе в каталог товаров и клике на к-л товар при долгом ожидании ответа от сервера появляется страница ожидания с...

Курсор ожидания
Добрый день! Скажи пожалуйста как сделать курсор ожидания?

13
0 / 0 / 0
Регистрация: 27.04.2008
Сообщений: 371
01.03.2012, 11:22
Как вариант написать батник вызывающий эти процедуры и через планировщик заданий запускать их.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
01.03.2012, 11:41
Цитата Сообщение от Allexei
Как вариант написать батник вызывающий эти процедуры и через планировщик заданий запускать их.
Не совсем представляю, как из батника можно вызвать процедуру 1С B)
0
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 107
01.03.2012, 11:46
Я на ОбработкуОжидания положила процедуру, в которой потом анализировала время и уже по нему смотрела, какую из процедур вызывать дальше.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
01.03.2012, 11:58
Цитата Сообщение от Paume
Я на ОбработкуОжидания положила процедуру, в которой потом анализировала время и уже по нему смотрела, какую из процедур вызывать дальше.
Я думаю, такой вариант мне подойдет. Спасибо за совет.
0
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
03.03.2012, 10:01
У меня таких процедур аж 7. И возникают задачи:
- вызывать с разной частотой.
- за один раз вызывать только одну процедуру.
Иначе может упасть быстродействие вообще. А если пару процедур сработали одновременно, то "тормознет" на несколько сек.
Мой Глобальный модуль:

Код ( (Unknown Language)):
Перем ТекВызов; // текущий счетчик вызовов
Процедура Ожидание()

// При старте системы
Если ПустоеЗначение(ТекВызов) = 1 Тогда
ТекВызов = 0;
КонецЕсли;
ТекВызов = ТекВызов + 1;

//------ Автоснятие резерва
Если (ТекВызов % 5 = 0) Тогда
ОжиданиеРезерв();
КонецЕсли;

//------ Сигнал или Завершение системы
Если (ТекВызов % 3 = 0) Тогда
ОжиданиеСигнал();
КонецЕсли;

//------ Заказ товара
Если (ТекВызов % 37 = 0) Тогда
ОжиданиеЗаказ();
КонецЕсли;

КонецПроцедуры // Ожидание


Процедура ПриНачалеРаботыСистемы()
ОбработкаОжидания("Ожидание", 5);
КонецПроцедуры // ПриНачалеРаботыСистемы
0
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
03.03.2012, 11:09
Дайнеко, а что это за %? не встречал такого

У меня так

Код ( (Unknown Language)):
Перем ТекЧас;
Процедура ПриНачалеРаботыСистемы()
ОбработкаОжидания("ПериодическиеПроцедур ы",300);
КонецПроцедуры

Процедура ПериодическиеПроцедуры()
Часы = "";
ТекущееВремя(Часы);
Если (ТекЧас = "") Тогда //первый запуск
ВыгрузкаНаСайт();
Изменениестатусов();
Отчет30Дней();
БитыеСсылки();
ИначеЕсли Часы<ТекЧас Тогда// следующий день
ВыгрузкаНаСайт();
Изменениестатусов();
Отчет30Дней();
БитыеСсылки();
ИначеЕсли (ТекЧас+1 = Часы) Тогда//новый час
ВыгрузкаНаСайт();
Изменениестатусов();
КонецЕсли;
ОтправкаСМС();// каждые пять минут
ТекЧас = Часы;
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
04.03.2012, 14:42
Цитата Сообщение от puh14
Дайнеко, а что это за %? не встречал такого
Действительно, что это такое? Очень интересно.
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
04.03.2012, 15:00
Гы, я тоже не знал про %
Век живи, век учись

В ЖКК нашел
% - остаток от деления, при выполнении оба операнда округляются до целого
0
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
04.03.2012, 21:41
Цитата Сообщение от puh14
Дайнеко, а что это за %? не встречал такого
Ну, пацаны, вы даете! Изучайте матчасть. ;)

Таким приемом я попытался сбалансировать нагрузку.
Вот во фрагменте puh14 процедуры вызываются каждый час. И если уж бабахнуло, то отработали все процедуры сразу.
Если они тяжеловесные, то у пользователя 1С замрет на несколько сек.

У меня же:
- проверка вызывается частенько (секунд 5)
- меленькие можно вызывать каждый раз. Например, обмен сообщениями.
- остальные, с коэффициентом. Получается частота их вызова в сек = 5*Кфц.
- коэффициенты указываю не кратные друг другу. Лучше всего простые числа. Это гарантирует, что за один вызов Ожидания() сработает только одна проца. Хотя надежней и поставить после каждой "Возврат"

С этим делом надо аккуратно. Представьте сидит человек 30 в базе. И у всех каждые н секунд бабахает вроде "Отчет30Дней()". А поставишь ОбработкаОжидания(,300); - потеряешь оперативность.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
05.03.2012, 10:55
Цитата Сообщение от Дайнеко
С этим делом надо аккуратно. Представьте сидит человек 30 в базе. И у всех каждые н секунд бабахает вроде "Отчет30Дней()". А поставишь ОбработкаОжидания(,300); - потеряешь оперативность.
Вот и у меня возникла проблема - одна и та же обработка запускается у нескольких пользователей практически одновременно. А поскольку она создает документ, то в результате получается несколько одинаковых документов. ;)
Как это побороть?
0
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
05.03.2012, 18:06
Списибо, буду знать про %.
Насчет одновременно бабахнуло - у меня выгрузки, отправки мыла и т.п. повешены на отдельного пользователя "Бендер" - потому как робот. У остальных пользователей периодические отчеты вызываются - но я их на прямые запросы переписал, посему тормозов нет.



Вот и у меня возникла проблема - одна и та же обработка запускается у нескольких пользователей практически одновременно. А поскольку она создает документ, то в результате получается несколько одинаковых документов.
Как это побороть?
Задайте что-то типа

Процедура ПриНачалеРаботыСистемы()
Если ИмяПользователя() = "Робот" Тогда
ОбработкаОжидания("ПериодическиеПроцедур ы",300);
КонецЕсли;
КонецПроцедуры

Вешаете скриптик (или батник) запускающий нужную базу с этим пользователем в планировщик задач и все. У меня этот робот трудится в отдельной всегда работающей терминальной сессии, чтобы всегда подруился, посмотрел как работает.
0
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
06.03.2012, 00:04
Цитата Сообщение от Ольга13
Вот и у меня возникла проблема - одна и та же обработка запускается у нескольких пользователей практически одновременно.
Сначала по понятиям:
"Проверка" - периодический вызов процедуры указанной в ОбработкаОжидания().
"Сработала процедура" - выполнилось в "Проверке" некоторое условие и запустилась вторая процедура, выполнившая некоторую полезную работу.

Какие приемы:
1) Первая ситуация: процедура должна срабатывать каждый час (каждые N минут). Если люди работают в терминале, то надо поставить срабатывание не проверкой часов компьютера: снял ТекущееВремя() и проверил, что минут=0 (думаю, понятно, почему). А по отсчету от момента запуска 1С. Например, если проверка вызывается каждые 10 сек., а полезную работу выполнять каждый час, то сверять, что счетчик вызовов кратен 3600/10. (Вот сдесь и нужен коварный знак "%"!)

2) Вторая ситуация: сработать раз в день, но в установленное время. Чтобы часы на всех компах сработали по-разному, нужно сверять время, но добавить +/- несколько секунд. Например, прибавить "Пользователь.Код".

3) После того как добились асинхронной работы пользователей, боремся с дублированием. Разумеется, надо продумать, что когда проц-ра отработает у одного пользователя, то когда она вызовется у другого пользователя, повторения результата быть не должно, новый док-т не запишется. Так у меня работает снятие резерва. У первого пользователя создался документ СнятиеРезерва, резерв снялся. У второго пытается сделать тоже, но 1С проанализировала, что резерва нет и пустой документ не записывает.
Только нужна разбежка про времени. Считаем, что процедура отрабатыввает 2 сек. Значит проверка должна быть не чаше 5-10 сек.

4) Прием с константой-семафором. Перед отработкой процедуры ставится что-то в константу. Другие программы видят ее и ничего не делают.

5) Способ Puh14 с "зомби" - реальный. Но ориентирован на большую контору, которую, хорошо бы, и сам программист обслуживал.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
10.03.2012, 11:59
Всем спасибо за советы, думаю, они мне помогут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.03.2012, 11:59
Помогаю со студенческими работами здесь

Таймаут ожидания
Помогите с кодом мой код тут https://www.cyberforum.ru/delphi-networks/thread156446.html как сделать так чтобы программа ждала...

Режим ожидания
Суть вопроса. Допустим пользователь открыл документ (основной или response) и в течение некоторого времени не редактировал там ничего, а...

Функция ожидания
Подскажите как называется. Аналог Wait.

Анимация ожидания
У меня в приложении есть длительные процессы, например подключение к удаленной базе данных, обычно в таких случаях я вывожу надпись типа...

Анимация ожидания
Нужно заблокировать экран и вывести картинку ожидания, пока не выполнится некое действие


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru