Имя: Пароль:
1C
1C 7.7
v7: Иногда зависает обработка
0 Масянька
 
21.06.13
14:18
День добрый!
Есть такая обработка:


Перем Предел;
Перем РасшФ, Курсорчик;
Перем фЗакрытия;
Перем мФайл;
Перем НачСекунда, ТекСекунда;

//********************************************************************************
Функция Time()

   Форма.Обновить();
   
   Возврат currentTime(,,ТекСекунда);
   
КонецФункции    // Time()  

//********************************************************************************
Функция СлучайноеЧисло()

   СлучайноеЧисло = _GetPerformanceCounter()%(Предел - 8);
   
   Возврат СлучайноеЧисло;

КонецФункции // СлучайнаяПозиция()

//********************************************************************************
Функция Курсор()
КонецФункции

//********************************************************************************
Процедура РаспаковатьBin(ИмяФайла,ИдентификаторФайла,РазмерФайла)

//©Александр Маляев http://infostart.ru/projects/600
   
   КаталогФормы = "";
   ИмяФормы     = "";
   РасположениеФайла(КаталогФормы, ИмяФормы);
   
   ТекстСкрипта = "
   |Sub Main
   |    Dim FSO,F
   |    Set FSO = CreateObject(""Scripting.FileSystemObject"")
   |    Set F = FSO.OpenTextFile(""" + КаталогФормы + ИмяФормы + """, 1)
   |    Str = """"
   |    BeginFind = 0
   |    Do
   |        Char = F.Read(1)
   |        Str = Str & Char
   |        If BeginFind = 0 Then
   |            If Right(Str," + СокрЛП(СтрДлина(ИдентификаторФайла)) + ")=""" + ИдентификаторФайла + """ Then
   |                BeginFind = 1
   |                Str = """"
   |            End If
   |        Else
   |            If Right(Str,2) = ""BM"" Then
   |                F.Skip(1076)
   |                Str=F.Read(" + СокрЛП(РазмерФайла) + ")
   |                F.Close
   |                Set F=FSO.CreateTextFile(""" + ИмяФайла + """)
   |                F.Write(Str)
   |                F.Close
   |                Exit Do
   |            End If
   |        End If
   |    Loop While F.AtEndOfStream=0
   |End Sub
   |";
   
   VBS = СоздатьОбъект("MSScriptControl.ScriptControl");
   
   VBS.Language = "vbscript";
   VBS.Timeout     = -1;
   VBS.AddCode(ТекстСкрипта);
   VBS.Run("Main");
   
КонецПроцедуры

//********************************************************************************
Процедура ПриОткрытии()

   Предел        = 117;
   
   Матф = СоздатьОбъект("Math");
   Матф.SRANd(_GetPerformanceCounter());

   currentTime(,,НачСекунда) ;
   
   Курсорчик = КаталогИБ()+"cursor2.cur";

   
   // определяем имя файла
   мФайл = СлучайноеЧисло();

   // собираем имя файла
   СтрИмяФайла = Строка(мФайл);
   РасшИмяФайла = ".jpg";
   КаталогФайла = "\\MANAGER2\1Cv7\DB\Shablons\Funny\";
   ИмяФайла = КаталогФайла + СтрИмяФайла + РасшИмяФайла;

   Картинка.Загрузить(ИмяФайла);
   Картинка.РежимРисования(2);
   
   // убираем курсор
   Курсорчик = КаталогИБ() + "cursor.cur";
   Если ФС.СуществуетФайл(Курсорчик) = 0 Тогда
       Состояние("Инициализация ...");
       РаспаковатьBin(Курсорчик,"Курсор()", 198);
   КонецЕсли;
   
   Если (Форма.Параметр <> "modal") Тогда
       ОткрытьФормуМодально("Processing#","modal",filePath());
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;

   фЗакрытия = 0;
   Форма.Закрыть();

КонецПроцедуры // ПриОткрытии

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

//********************************************************************************
Процедура СамоЗакрытие()
 
 Форма.Закрыть(0);
 
КонецПроцедуры

//********************************************************************************
Функция ОбновитьКартинку()
   
   ПрошлоСекунд = ТекСекунда - НачСекунда;

   Если (ПрошлоСекунд = 8) Тогда

       // определяем имя файла
       мФайл = мФайл + 1;

       // собираем имя файла
       мСтрИмяФайла = Строка(мФайл);
       мРасшИмяФайла = ".jpg";
       мКаталогФайла = "\\MANAGER2\1Cv7\DB\Shablons\Funny\";
       мИмяФайла = мКаталогФайла + мСтрИмяФайла + мРасшИмяФайла;
       
       Картинка.Загрузить(мИмяФайла);
       Картинка.РежимРисования(2);
       НачСекунда = ТекСекунда;
       
   КонецЕсли;

   Форма.Обновить();
   
   Возврат "";
   
КонецФункции // ОбновитьКартинку

//********************************************************************************
Процедура ПослеОткрытия()

   РасшФ = СоздатьОбъект("Расширениеформы");
     РасшФ.УстановитьФорму(Форма);
 
   Окна = СоздатьОбъект("Окна");
   Окна.СтильОкна(Форма, 1);

   Если ФС.СуществуетФайл(Курсорчик) = 1 Тогда
       РасшФ.УстановитьКурсор(Курсорчик);
   КонецЕсли;
 
   РасшФ.ОбработкаОжидания("СамоЗакрытие", 45000); //время в милисекундах - 1 минута = 60000

КонецПроцедуры



Смысл - при открытии программы выводится заставка с картинкой.Каждые 8 секунд картинка меняется. Первая картинка выбирается случайно (типа, получить случайное число). На форме есть таймер. Через 40 секунд обработка закрывается.

Так вот - иногда (не могу объяснить и поймать этот момент) - картинки перестают меняться, то есть висит одна картинка, через 40 секунд - заставка закрывается.

Где я накосячила?

PS Цой - жив!
1 Voronve
 
21.06.13
14:22
Если (ПрошлоСекунд = 8) Тогда
Заменить на
   Если (ПрошлоСекунд >= 8) Тогда

   РасшИмяФайла = ".jpg";
Заменить на
   РасшИмяФайла = "*.jpg";
2 Voronve
 
21.06.13
14:23
РасшИмяФайла = ".jpg";
Оставить. пардон
3 Масянька
 
21.06.13
14:24
(1) Не помогло.
4 Ёпрст
 
гуру
21.06.13
14:24
(0) Если формекс>99 версии, то в нём не работает ПослеОткрытия в модальной форме
5 Ёпрст
 
гуру
21.06.13
14:25
переделай на ПослеСозданияФормы.. у тебя тупо обработкаОжидания не запущается и привет
6 Ёпрст
 
гуру
21.06.13
14:26
Ну и .. есть увереность, что по пути есть картинка вообше ?
Выведи в сообщиьт имя картинки при её "смене"
7 Масянька
 
21.06.13
14:30
(4) У меня 2.0.5.0 #60
(5) Не понял :(
(6) То работает, то нет. Картинки - есть (это всё, в чём я уверена) :)))
8 Масянька
 
21.06.13
14:31
+(5) А почему тогда через 40 секунд - закрывается (как и должно)?
9 Ёпрст
 
гуру
21.06.13
14:31
(7) ё.. какое старьё..
10 Ёпрст
 
гуру
21.06.13
14:31
возьми нормальный формекс и отдельно 1cpp
11 Масянька
 
21.06.13
14:33
(10) Где?
Причем, бывает - открылась и все (картинка не меняется), а бывает - несколько картинок сменилось, потом висит....
12 dk
 
21.06.13
14:33
про замер производительности в отладчике слышала?
13 Масянька
 
21.06.13
14:34
(12) Слышала, а при чем тут это?
14 Ёпрст
 
гуру
21.06.13
14:36
(11)
http://www.1cpp.ru/forumfiles/Attachments/icpp-3-2-4-1.rar
http://www.dorex.pro/files/?formex_t.zip

ЗЫ: выкини везде Форма.Обновить, выкини свой таймер, и переменые ПрошлоСекунд  и т.д..

Тупо Создай объект Таймер и запусти 2 обработки ожидания, одна - для закрытия поделки, вторая - для смены картинки.
Усё..
15 Масянька
 
21.06.13
14:36
1с++ 3.2.2.8
16 Ёпрст
 
гуру
21.06.13
14:36
И форму обновляй, только в момент смены картинки..
а не формулой текста на форме - этим ты грузишь проц на 100 %
17 Ёпрст
 
гуру
21.06.13
14:38
Ну и все картинки, при желании, можно кинуть в саму поделку (правда её размерчик возрастёт некисло так..)
18 Масянька
 
21.06.13
14:38
(14) (16) Спасибо! Пойду мучаться :))))
19 Масянька
 
21.06.13
14:38
(17) Не, мне так не нравится - там около 120 картинок.
20 Масянька
 
21.06.13
16:55
Ёпрст!
Как всегда - ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
21 Ёпрст
 
гуру
21.06.13
16:57
заработало шоле ?
22 Масянька
 
21.06.13
16:58
(21) Ага :)))))
Прикольная эта штука - Таймер....
23 Масянька
 
21.06.13
17:00
В общем, если когда будешь в наших краях - обращайся :))))
24 Ёпрст
 
гуру
21.06.13
17:02
был я там, на НГ в Геленджике, и в Новоросе проездом
25 Масянька
 
21.06.13
17:03
(24) Чего не сказал-то? На НГ? Лучше летом - голые загорелые девушки и волосатые мужики :)))))))))
26 Ёпрст
 
гуру
21.06.13
17:11
(25) зовут да, круглый год.. некогда.
Независимо от того, куда вы едете — это в гору и против ветра!