Sleep в 1С

База знаний
  1. 11 г. назад

    решение для Windows, используется dynwrap.dll

    Перем Wrapper;
    
    Процедура Спать(мсек)
    	Wrapper.Sleep(мсек);
    КонецПроцедуры
    
    Wrapper=Новый ComОбъект("DynamicWrapper");
    Wrapper.Register("KERNEL32.DLL","Sleep","i=l","f=s");
    
    
    Ответы: (4) (23)
  2. А чем WScript не понравился?

    Ответы: (2)
  3. (1) да всем нравится. просто одно из решений.

    кстати, не проверял, но чисто теоретически с маленькими значениями задержки такое решение должно работать быстрее.
    скрипт ведь ещё распарсить надо, построить дерево разбора, выполнить.
    а тут прямой вызов WinAPI-функции

    Ответы: (3)
  4. (2) Ну как бы так сказать... В многопроцессной, многопоточной и совсем не RT среде разговоры насчёт маленьких задержек выглядят несколько неловко :-)

  5. (0) DynamicWrapper вроде как только 32х разрядный, как мне говорил artbear проблема в том, что исходники утеряны.
    Да и то, что в (0) можно реализовать с помощью rundll32.exe

  6. sapphire DynamicWrapper вроде как только 32х разрядный

    да, я в курсе

    sapphire проблема в том, что исходники утеряны.

    это печально. есть ещё DynamicWrapperX - его исходники тоже канули в Лету?

    sapphire можно реализовать с помощью rundll32.exe

    примерчик есть?

    Ответы: (6) (8)
  7. (5)
    rundll32.exe Kernel32.dll,Sleep {количество}

    Ответы: (7) (9)
  8. (6) а, командой системы? сразу не вкурил.

    так это же некошерно, имхо

    Ответы: (10)
  9. (5) ИМХО, не так уж и нужно использовать вызов dll.
    В принципе, написать с нуля можно и не так уж и сложно, но мне, например, ни к чему.

  10. (6)думаю, вызов будет идти дольше, чем если даже через vbs-скрипт

    Ответы: (12)
  11. (7) а создавать COM-объект кошернее, да?

    Ответы: (11)
  12. (10) ага :)

  13. (9) С чего бы это?

    Ответы: (14)
  14. ком-сервер - он всегда в памяти, уже готов выполнять команды.

    а запуск нового приложения - это, с точки зрения системы, целый роман в трёх томах

  15. (12) чисто моё имхо. но почему-то почти уверен в этом

    Ответы: (15)
  16. (14) да ровно то же самое будет.

    Ответы: (16)
  17. (15) не, оно понятно, что в наш век юзер разницы по времени не заметит. но по факту-то будет не то же самое

    Ответы: (17)
  18. (16) насколько?

    Ответы: (18)
  19. (17) думаю, инициализация приложения будет подольше разбора vb-скрипта ком-сервером. ну, как минимум раза в два. но счёт там на миллисекунды будет, это понятно

    Ответы: (19)
  20. (18) Не ответ

    Ответы: (20)
  21. (19) хочешь, чтобы я замеры сделал? чесслово, лень, чистосердечно признаюсь :)

    Ответы: (21)
  22. (20) Да мне тоже...

    Ответы: (22)
  23. (21) тогда ничья :)

  24. 10 г. назад
    04.02.2014 14:27:35 отредактировано andrewks
    Процедура Sleep(ПаузаВСекундах = 0) Экспорт
    	
    	ИмяСкриптФайла = КаталогВременныхФайлов()+"\sleep.js";
    	
    	Если ПаузаВСекундах <= 0 Тогда
    		Если НайтиФайлы(ИмяСкриптФайла).Количество() = 0 Тогда
    			Скрипт=Новый ТекстовыйДокумент();
    			Скрипт.УстановитьТекст(
    			"if (WScript.Arguments.Count()==0)
    			|    WScript.Quit();
    			|else
    			|    if (isNaN(parseInt(WScript.Arguments(0))))
    			|        WScript.Quit();
    			|WScript.Sleep(WScript.Arguments(0));");
    			Скрипт.Записать(ИмяСкриптФайла,КодировкаТекста.ANSI);
    		Иначе
    			УдалитьФайлы(ИмяСкриптФайла);
    		КонецЕсли;
    		Возврат;
    	Иначе
    		Если НайтиФайлы(ИмяСкриптФайла).Количество() = 0 Тогда
    			Sleep();
    		КонецЕсли;
    	КонецЕсли;
    	
    	Run = "wscript.exe " + "" + ИмяСкриптФайла + "" + " " + Формат(ПаузаВСекундах * 1000,"ЧДЦ=0; ЧГ=");
    	Shell=Новый COMОбъект("wscript.shell");
    	Shell.Run(Run,0,-1);
    	Shell = Неопределено;
    	
    КонецПроцедуры;

    работает

    Ответы: (24) (25)
  25. (23) пользуйся тегами. так же гораздо красивее :)

  26. (23) слишком сложно. зачем писать внешний файл? зачем именно js, когда можно "на лету" исполнить ws-скрипт со Sleep()

  27. а хз. нашел на мисте вчера

    Ответы: (27)
  28. (26) вот здесь: http://help1c.com/faq/view/584.html без лишнего огорода

     Процедура глПауза(Сек)
    scr = Новый COMОбъект("WScript.Shell");
    scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
    КонецПроцедуры;  
    Ответы: (28)
  29. (27) я тоже такое находил.
    ща твой код проверил на серве:

    Ошибка при вызове метода контекста (Run)
    scr.Run("sleep "+СокрЛП(Число(Сек)),0,1);
    по причине:
    Произошла исключительная ситуация (0x80070002)
    
    Ответы: (29)
  30. (28) на х64 сервере 1С не взлетит по известной причине

    Ответы: (30)
  31. (29) значит, неуниверсальное решение :)
    Следующий!

    Ответы: (31)
  32. (30) универсальных решений не бывает

или зарегистрируйтесь чтобы ответить!