Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Annihilant on November 05, 2015, 08:45:47 AM

Title: Ошибка при интерпретации строки
Post by: Annihilant on November 05, 2015, 08:45:47 AM
Ошибка при интерпретации строки TFWRITE("otchet.txt", STRCONCAT($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts, " ", $note))
продолжить выполнение?

Code: [Select]
SUB(LOG,$note) // подпрограмма лога с датой
//укорачиваем переменные
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
//проверяем переменные на двузначность
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   TFWRITE("otchet.txt", STRCONCAT($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts, " ", $note)) // запись в файл
END_SUB

но не постоянно а как то изредка. В чем может быть проблема?
Title: Re: Ошибка при интерпретации строки
Post by: Vint on November 05, 2015, 09:18:23 AM
часто пишешь, нет задержек или они маленькие.
Без задержки очень быстро скрипт  пытается писать в ещё заблокированный файл.
Title: Re: Ошибка при интерпретации строки
Post by: Annihilant on November 05, 2015, 09:53:37 AM
Ок, попробую увеличить временные отрезки.
Title: Re: Ошибка при интерпретации строки
Post by: Atas on November 13, 2015, 03:54:18 AM
Ок, попробую увеличить временные отрезки.
К сожалению, это не поможет. КМ должен иметь монопольный доступ к файлу с которым работает. Он не начнет новую запись в файл, пока функция TFWRITE, в данном случае,  не отработает до конца и не вернет код ошибки, то есть результат своей работы. И если результат выполнения функции - ошибка, то КМ приостановит выполнение скрипта и сообщит об этом пользователю. Поэтому задержки тут не при чем. И если какой то программе, параллельно с КМ, требуется открывать файл "otchet.txt" для чтения/записи, то они должны обмениваться кодами ошибок, что бы синхронизировать свою работу.
Например, после запуска bat-файла из скрипта, cmd.exe может сообщить Clickermann'у об окончании своей работы через буфер обмена. Для этого bat-файл должен завершаться соответствующей строкой, например CLS | clip. Clickermann в свою очередь, будет в цикле проверять буфер обмена и ждать появления в нем характерного символа, и после его обнаружения продолжит выполнение сценария (либо выполнит какое то определенное действие, если превышен интервал ожидания).
Еще можно попробовать решить проблему, если в настройках КМ поставить галочку "Игнорировать ошибки".
Title: Re: Ошибка при интерпретации строки
Post by: Vint on November 13, 2015, 08:17:06 AM
По моему в условии и так никто кроме кликера в файл не пишет.

Как то, по просьбе, делал скрипт, который пересчитывал в записанном сценарии все задержки в n раз.
Скрипт пробегал по строкам и найдя WAIT или WAITMS делал пересчёт и писал на то же место.
При работе скрипт падал на строке записи. То после 300 строк, то после 500... больше 700 кажется ни разу не проскочил.
Поставив минимальную задержку в 5 мс на каждом цикле обработки строки всё наладилось и скрипт стал благополучно перерабатывать файлы в несколько тысяч строк.

Тут даже дело не в монопольном доступе, потому что кликер работает один, а в буферизации записи на диск контролируемой виндой.
Винда берёт данные на запись и рапортует программе что всё OK и завершено, отпуская её тем самым на волю. Этот механизм ускоряет работу программ при работе с медленным диском.
Из-за одновременных запросов на запись к системе, очередь имеет разную длину ну и соответственно до нашей записи когда время дойдёт не предсказуемо. Чем меньше нагрузка на комп тем лучше.