Имя: Пароль:
1C
 
Пауза в программе
0 Надо работать
 
20.04.10
18:28
Нужна пауза (например секунд 20), с возможностью прерывания, но без загрузки процессора

Такой вариант не дает прервать процесс

// ===============================
Процедура Sleep(Миллисекунд) Экспорт
   ИмяФайла=КаталогПользователя()+"sleep.vbs";
   FSO=СоздатьОбъект("Scripting.FileSystemObject");
   Текст=FSO.OpenTextFile(ИмяФайла,2,1);
   Текст.WriteLine("wscript.sleep "+Миллисекунд);
   Текст.Close();
   cmdLine="wscript.exe """+ИмяФайла+"""";
   WshShell=СоздатьОбъект("WScript.Shell");
   WshShell.Run(cmdLine, 0, -1);
КонецПроцедуры    //Sleep


Для Инд=0 По Ждать Цикл
   Состояние(Сообщение+" (осталось "+(Ждать-Инд)+" сек.)");
   sleep(1000);
КонецЦикла;
1 FN
 
20.04.10
18:30
ОбработкаОжидания + Кнопка "Отмена" на форме
2 Aswed
 
20.04.10
18:32
Цикл от 1 до 1000000

ЗЫ Вторую цифру менять в зависимости от необходимого времени паузы.
3 Шапокляк
 
20.04.10
18:33
Можно какое-нибудь предупреждение выводить с таймаутом 20 секунд, но все равно программа не даст что-то сделать во время паузы
4 Fragster
 
гуру
20.04.10
18:34
Вопрос("Прервать?".......,"Да+Нет",20);
5 Fragster
 
гуру
20.04.10
18:35
ну и в цикл завернуть, чтобы при «нет» продолжала ждать
6 Жан Пердежон
 
20.04.10
18:35
Вопрос(<Текст_вопроса>,<Режим>,<Таймаут>)
Предупреждение(<Текст_сообщения>,<Таймаут>)
7 dk
 
20.04.10
18:37
один я в белом ))
ввестистроку()
8 Надо работать
 
20.04.10
18:40
(6) Насколько я помню, подобный код грузит процессор
9 Ковычки
 
20.04.10
18:42
(7) плюспяцот, остальные варианты в топку
10 Ёпрст
 
гуру
20.04.10
18:42
Что, всё настолько быстро работает, что нужно притормозить?
:)
11 Kreont
 
20.04.10
19:11
Код частично не мой, де то тут и взял :)
Перем ПаузаМілісекунд;

// Пауза під час виконання
Функция sleep(ms)
   сек=цел(ms/1000);
   ВвестиСтроку(ms, "Пауза в мілісекундах", 100, 0, сек);
   Возврат Число(ms);
КонецФункции

ПаузаМілісекунд = 2000;
Потом в цикле де надо тормознуть:
ПаузаМілісекунд = sleep(ПаузаМілісекунд);

В таком варианте можно паузу динамично менять походу +/- и не глючит
12 sapphire
 
20.04.10
19:51
Пердупреждение( ) вроде тоже с паузой
13 Ковычки
 
20.04.10
21:05
(12) с вечной, если чо
14 Torquader
 
20.04.10
23:49
С диалогом бывают проблемы - если свернуть окно, то время в диалоге не идёт, и он закроется только после активизации программы.
15 smaharbA
 
21.04.10
06:38
с ввестистроку не бывает
16 DrZombi
 
гуру
21.04.10
08:11
+(0)ВК 1С++ объект "Система"
Метод

Уснуть
Sleep
Синтаксис:
Уснуть(КоличествоМиллисекунд)
Назначение:
Делает паузу путем вызова системной функции Sleep(КоличествоМиллисекунд).
Параметры:
КоличествоМиллисекунд - тип: Число. .
Возвращаемое значение:
17 Андрюха
 
21.04.10
08:17
Как вариант, который еще не озвучили, - таймер FormEx
18 План счетов
 
21.04.10
08:25
как вариант:
для паузы менее 60 сек.

//_____________________________________________________________________________
Процедура Задержка(Врем, Текст = "Ожидание") Экспорт
   // Врем д.б. не более 60 сек    
   СекундыТекущие = Число(Прав(Строка(ТекущееВремя()),2));
   Секунды_С_Задержкой = СекундыТекущие + Врем;
   Если Секунды_С_Задержкой>60 Тогда
       Секунды_С_Задержкой = Секунды_С_Задержкой - 60;
   КонецЕсли;
   Если Секунды_С_Задержкой>=60 Тогда
       Секунды_С_Задержкой = Врем;
   КонецЕсли;
   Пока 1=1 Цикл  
       ПрошлоСекунд = Число(Прав(Строка(ТекущееВремя()),2)) - СекундыТекущие;
       Состояние(Текст+" прошло "+Врем+" секунд,  "+ПрошлоСекунд+" сек.");
       Если Число(Прав(Строка(ТекущееВремя()),2)) = Секунды_С_Задержкой Тогда
           Прервать;
       КонецЕсли;
   КонецЦикла;
   Состояние(" ");
КонецПроцедуры
19 DrZombi
 
гуру
21.04.10
08:40
Варианты с циклом - это не кошерно + 100% загрузка проца :)
20 Надо работать
 
21.04.10
11:30
(17) Во-во, я подозревал что что-то такое в формексе есть.

Со вводом строки все таки не сильно красиво получается
21 Надо работать
 
21.04.10
11:34
А стандартная ОбработкаОжидания секунды перепрыгивает, падла :)
22 Эльниньо
 
21.04.10
11:48
Приблуду Ромикса попробуй, чтобы проц не грузить.
23 Kreont
 
21.04.10
11:52
(20) А че с вводом строки некрасиво? Зато есть возможность менять время задержки динамично, другие способы такой возможности не дадут :)
24 smaharbA
 
21.04.10
13:18
еще один метод

Перем Таймер,Время;
//*******************************************
Процедура Сформировать()
   //Выставим 1 сек
   Таймер.IntervalBetweenEvents=1000;
   Таймер.Put_();                                    
   Старт=_GetPerformanceCounter();
   Время.NextEvent();
   Сообщить(_GetPerformanceCounter()-Старт);
   //Поменяем интервал на 10 сек
   Таймер.IntervalBetweenEvents=Таймер.IntervalBetweenEvents*10;
   Таймер.Put_();                                    
   Старт=_GetPerformanceCounter();
   Время.NextEvent();
   Сообщить(_GetPerformanceCounter()-Старт);
   
КонецПроцедуры


Процедура ПриОткрытии()
   Локатор=CreateObject("WbemScripting.SWbemLocator");
   Сервис=Локатор.ConnectServer();
   Интервал=Сервис.Get("__IntervalTimerInstruction");
   Таймер=Интервал.SpawnInstance_();
   Таймер.IntervalBetweenEvents=100000;
   Таймер.TimerId=_GetPerformanceCounter();
   Таймер.Put_();                                    
   Время=Сервис.ExecNotificationQuery("SELECT * FROM __TimerEvent WHERE TimerID = '"+Таймер.TimerId+"'");
КонецПроцедуры    // ПриОткрытии


Процедура ПриЗакрытии()
   Таймер.Delete_();
КонецПроцедуры    // ПриЗакрытии
25 Надо работать
 
21.04.10
13:36
(24) Не прерывается
26 smaharbA
 
21.04.10
13:37
(25) в курсе, просто как вариант паузы
27 NS
 
21.04.10
13:41
То есть как обработка ожидания перепрыгивает секунды?