Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Вопрос по классу таймер (число прочтений - 5383 )
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Вопрос по классу таймер
21. Июля 2012 :: 22:40
Печать  
Интересует следующий вопрос.
Допустим интервал таймера 1 минута, тогда если назначеная таймеру процедура отрабатывает скажем минут за 10, таймер "ждет окончания ее выполнения или нет?"
  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #1 - 21. Июля 2012 :: 23:45
Печать  
Насколько я помню, не ждет. Через минуту вызывает процедуру-обработчик снова и снова. Лучше в обработчике останавливать таймер, а после окончании обработки снова запускать. Я именно так и делаю.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #2 - 22. Июля 2012 :: 20:35
Печать  
zk96 писал(а) 21. Июля 2012 :: 23:45:
Насколько я помню, не ждет. Через минуту вызывает процедуру-обработчик снова и снова. Лучше в обработчике останавливать таймер, а после окончании обработки снова запускать. Я именно так и делаю.

понял. спасибо
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #3 - 23. Июля 2012 :: 11:15
Печать  
еще проблема на рисовалась!
Код
Выбрать все
глТаймер.ЗадатьОбработчикВГлобальномМодуле("глхМенеджерПочты");
{Глобальный модуль(170)}: ВНИМАНИЕ: создание таймера - не найден метод <глхМенеджерПочты> в глобальном модуле или у него количество параметров более нуля 



Сама процедура есть, но она в дополнительном глобальнике!
Процедура должна быть обязательно в основном глобальнике??
Код
Выбрать все
		|Процедура глхМенеджерПочты()Экспорт
		|	глТаймер.Остановить();
		|	Час = 0;
		|	Минута = 0;
		|	Секунда = 0;
		|	ТекущееВремя(Час,Минута,Секунда);
		|	Если Час > 21 Тогда
		|		ИмяФайла = КаталогИБ() + ""ExtForms\Автообмен.ert"";
		|		Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
		|			КонтФормы = ""Программно"";
		|			ОткрытьФорму(""Отчет"",КонтФормы,ИмяФайла);
		|			ЗавершитьРаботуСистемы(0);//Завершаем работу системы под менеджером! Чтобы штраф не получить!
		|		КонецЕсли;
		|	КонецЕсли;
		|	ОткрытьФорму(""Обработка.сфМенеджерОбмена"");
		|	глТаймер.Запустить(Константа.ПериодОпросаМенеджераОбмена);
		|КонецПроцедуры
 



Вот как вызываю

Код
Выбрать все
		|Процедура глхПриНачалеРаботыСистемы()Экспорт
		|	глРасширениеФорм = СоздатьОбъект(""Сервис"");
		|	глРасширениеФорм.ВключитьРаскраскуТаблиц();
		|	глРасширениеФорм.ИспользоватьПланРаскраски(1);
		|	Если ИмяПользователя() = ""МенеджерОбмена"" Тогда
		|		глТаймер = СоздатьОбъект(""Таймер"");
		|		глТаймер.ЗадатьОбработчикВГлобальномМодуле(""глхМенеджерПочты"");
		|		глТаймер.Запустить(Константа.ПериодОпросаМенеджераОбмена);
		|	КонецЕсли;
		|
		|	Если СокрЛП(глПользователь.Код) = ""Зубакина"" Тогда
		|		ОткрытьФорму(""Обработка.ХВС_СнятиеСРезерва"");
		|	КонецЕсли;
		|
		|	глСписокИндексовДокументов = СоздатьОбъект(""СписокЗначений"");
		|	Для Индекс = 1 По Метаданные.Документ() Цикл
		|		катор,Строка(Индекс));
		|	КонецЦикла;
		|КонецПроцедуры
 

  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #4 - 23. Июля 2012 :: 13:00
Печать  
Я не использую доп.глобальный метод. Таймер изспользую либо в глобальнике, либо в классах.
Что-то здесь на форуме писали об использовании методов дополнительного глобального модуля : то ли он у тебя еще не проинициализировался, то ли еще что-то, а ты уже вызываешь его методы.
Попробуй сначала добавить доп.гл.модуль, а потом вызови его метод где и создавай таймер. По идее, так должно работать.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #5 - 23. Июля 2012 :: 13:08
Печать  
zk96 писал(а) 23. Июля 2012 :: 13:00:
Я не использую доп.глобальный метод. Таймер изспользую либо в глобальнике, либо в классах.
Что-то здесь на форуме писали об использовании методов дополнительного глобального модуля : то ли он у тебя еще не проинициализировался, то ли еще что-то, а ты уже вызываешь его методы.
Попробуй сначала добавить доп.гл.модуль, а потом вызови его метод где и создавай таймер. По идее, так должно работать.

Так и делаю
У меня 2 доп. глобальника в первом я определяю процедуру а во втором делаю таймер
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #6 - 23. Июля 2012 :: 14:40
Печать  
короче таймер не работает с доп глобальниками.
тогоже самого добился через Сервис.ОбработкаОжидания()

В процедуре обработки
в начале делаю так

Код
Выбрать все
глСервис.ОбработкаОжидания("МенеджерОбмена",0) 



в конце процедуры

Код
Выбрать все
глСервис.ОбработкаОжидания("МенеджерОбмена",60000) 

  
Наверх
 
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #7 - 23. Июля 2012 :: 14:52
Печать  
Мне лично больше Таймер нравится.
Я только-что проверил Таймер с доп.глоб.модулем - не работает.
Но в классах он прекрасно работает. Главное сохранять объект класса.
  
Наверх
 
IP записан
 
mozer
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 324
Местоположение: Пермь
Зарегистрирован: 14. Января 2011
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #8 - 23. Июля 2012 :: 15:57
Печать  
zk96 писал(а) 23. Июля 2012 :: 14:52:
Мне лично больше Таймер нравится.
Я только-что проверил Таймер с доп.глоб.модулем - не работает.
Но в классах он прекрасно работает. Главное сохранять объект класса.

да задался похожей задачей буду писать клас "Задача" и там все выполнять. Щас нужно проверить быстро работоспособность обработки
  
Наверх
 
IP записан
 
MrDen
Junior Member
**
Отсутствует



Сообщений: 50
Местоположение: Краснодар
Зарегистрирован: 19. Ноября 2008
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #9 - 08. Августа 2012 :: 19:52
Печать  
mozer писал(а) 23. Июля 2012 :: 15:57:
да задался похожей задачей буду писать клас "Задача" и там все выполнять. Щас нужно проверить быстро работоспособность обработки

Делал множественные таймеры с исполняемыми модулями, получал нестабильность.
Может подойдет 1С Планировщик
http://infostart.ru/public/15995/
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #10 - 09. Августа 2012 :: 03:30
Печать  
MrDen писал(а) 08. Августа 2012 :: 19:52:
Делал множественные таймеры с исполняемыми модулями, получал нестабильность.

В чем выражалась нестабильность?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
MrDen
Junior Member
**
Отсутствует



Сообщений: 50
Местоположение: Краснодар
Зарегистрирован: 19. Ноября 2008
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #11 - 11. Августа 2012 :: 04:40
Печать  
artbear писал(а) 09. Августа 2012 :: 03:30:
MrDen писал(а) 08. Августа 2012 :: 19:52:
Делал множественные таймеры с исполняемыми модулями, получал нестабильность.

В чем выражалась нестабильность?

При работе 1С Планировщика каждое задание запускалось в своем таймере, при этом после открытия форм запускаемых обработок и особенно при манипуляциях с контекстом формы обработать завершение формы не представлялось возможным. Данная ошибка не была систематической и при этом отловить ее было сложно. Данная ошибка возникала не только у меня поэтому пришлось отказаться от создания таймера для каждой задачи и обработки кода таймера в исполняемом модуле.
Также была выявлена странная закономерность:
если в запускаемой через 1С Планировщик внешней обработке в секции ПриОткрытии() использовать команду Форма.Закрыть() это может привести зависанию задачи и необходимости перезапуска вручную при этом цепочка команд СтатусВозврата(0) и Возврат к таким ошибкам не приводили.
  
Наверх
ICQ  
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Вопрос по классу таймер
Ответ #12 - 13. Августа 2012 :: 02:11
Печать  
Цитата:
если в запускаемой через 1С Планировщик внешней обработке в секции ПриОткрытии() использовать команду Форма.Закрыть() это может привести зависанию задачи и необходимости перезапуска вручную при этом цепочка команд СтатусВозврата(0) и Возврат к таким ошибкам не приводили.


Помниццо, есть у 1Ски какие-то баги с освобождением памяти, что ли, при закрытии формы.
У товарища в базе какая-то регламентная обработка вызывала 100500 раз открытие разных форм. Запускали они ее ночью, к утру все сильно тормозило.
Обнаружилось, что в открываемых формах вместо СтатусВозврата(0) в ПриОткрытии() было Форма.Закрыть(). Когда все Форма.Закрыть() были исправлены на СтатусВозврата(0) - регламент стал проходить заметно веселее.
Подробностей за давностью лет уже не помню, но такой трабл с таким решением у него был. Ибо товарищ ОЧЕНЬ непечатно выражался, когда понял, в чем дело.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопрос по классу таймер
Ответ #13 - 14. Августа 2012 :: 03:41
Печать  
Satans Claws писал(а) 13. Августа 2012 :: 02:11:
Помниццо, есть у 1Ски какие-то баги с освобождением памяти, что ли, при закрытии формы.
У товарища в базе какая-то регламентная обработка вызывала 100500 раз открытие разных форм. Запускали они ее ночью, к утру все сильно тормозило.
Обнаружилось, что в открываемых формах вместо СтатусВозврата(0) в ПриОткрытии() было Форма.Закрыть(). Когда все Форма.Закрыть() были исправлены на СтатусВозврата(0) - регламент стал проходить заметно веселее.

У 1С есть очень серьезные проблемы с закрытием формы, память сразу не освобождается.
В свое время делали тесты по Форма.Закрыть() - падает довольно быстро, 100-200 форм не больше, если я правильно помню.
если юзать добавленный мной в 1С++ метод Система.ЗакрытьФорму(), то такого ограничения нет, и форм можно открыть намного больше, до 1000, если опять не ошибаюсь, доходило.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать