Что нового

Ошибки Скрипт грузит процессор на 30%

Shabr

Новичок
Сообщения
2
Репутация
0
Добрый день
Есть простенький скрипт найденный на просторах интернета.
Выполняет задачу по автоматической печати pdf файлов из папки.
Но есть проблема он грузит процессор 25-30%.
Сам я не программист но подозреваю что дело в коде.
Буду рад если кто подскажет что в коде не так

AutoIt код:
;Автоматическая печать PDF-файлов, появляющихся в определенной папке

;Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
$gWatchFolder = "d:\AutoPrint\"

;Основной цикл
While true
   Local $search = FileFindFirstFile($gWatchFolder & "*.pdf")
   If @error Or ($search = -1) Then ContinueLoop
   Local $file = FileFindNextFile($search)
   PrintFile($gWatchFolder & $file)
   Sleep(8000)
WEnd

;Функция печати конкретного pdf-файла
Func PrintFile($pFileName)

   $pNewFileName = StringReplace( $pFileName, ".pdf", "_.pdf")

   ;Ищем Фоксит ридер
   If FileExists("c:\Program Files\Foxit Software\Foxit Reader\FoxitReader.exe") Then
      $s = """c:\Program Files\Foxit Software\Foxit Reader\FoxitReader.exe"" /p """ & $pNewFileName & """"
   ElseIf FileExists("c:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe") Then
      $s = """c:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe"" /p """ & $pNewFileName & """"
   Else
      MsgBox(4096, "Не установлена программа Foxit Reader!", "Foxit Reader.exe does NOT exists")
      Exit
   EndIf

   ;Попытаемся переимновать файл, чтобы определить, дозаписан ли он до конца.
   If FileMove($pFileName, $pNewFileName) Then

      ;запускаем печать pdf через Фоксит Ридер и ждём, когда процесс завершится
      Local $PID = Run($s)
      ProcessWaitClose($PID)

      ;удаляем файл, чтобы он повторно не печатался
      If Not FileDelete($pNewFileName) Then
         msgbox(1,"","Не удалось удалить файл " & $pNewFileName & " ! Зовите системного администратора!")
         Exit
      EndIf

   EndIf

EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Задержку перенесите в начало цикла
Код:
;Основной цикл
While true
   Sleep(8000)
   Local $search = FileFindFirstFile($gWatchFolder & "*.pdf")
   If @error Or ($search = -1) Then ContinueLoop
   Local $file = FileFindNextFile($search)
   PrintFile($gWatchFolder & $file)
WEnd
 

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
И переменную:
Код:
$search = FileFindFirstFile($gWatchFolder & "*.pdf")

вынеси перед циклом, так будет правильней.
Сообщение автоматически объединено:

Код:
$search = FileFindFirstFile($gWatchFolder & "*.pdf")

While Sleep(8000)
    $file = FileFindNextFile($search)
    If @error Then
        ExitLoop
    EndIf
    PrintFile($gWatchFolder & $file)
WEnd
 
Автор
S

Shabr

Новичок
Сообщения
2
Репутация
0
Респект парни. Это помогло.
 
Верх