Автор |
Сообщение |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
Доброго дня!
Вопрос о паузе (остановке исполнения кода) на заданное время (5-8 сек.).
На QPILE это реализовано так (работает):
Код: |
FUNC FUN_PAUSE(PAUSE_TIME)
' функция реализации временной паузы
PST = GET_DATETIME()
FIRST_SYS_TIME = 0+GET_VALUE(PST, "HOUR")*3600000 + GET_VALUE(PST, "MIN")*60000 + GET_VALUE(PST, "SEC")*1000 + GET_VALUE(PST, "MILLISEC")
FOR PST_FLAG FROM 0 TO 1
PST = GET_DATETIME()
SECOND_SYS_TIME = 0+GET_VALUE(PST, "HOUR")*3600000 + GET_VALUE(PST, "MIN")*60000 + GET_VALUE(PST, "SEC")*1000 + GET_VALUE(PST, "MILLISEC")
DIFF_TIME=(SECOND_SYS_TIME-FIRST_SYS_TIME)
IF DIFF_TIME<= PAUSE_TIME*1000
PST_FLAG = -1
END IF
END FOR
END FUNC
|
А вот мой перевод этого кода на AFL:
Код: |
_FLAG = 0;
PAUSE_TIME = 8;
StaticVarSet( "FIRST_Time", Now( format = 4 ) );
FOR ( i = 0 ; _FLAG < 0; i++ )
{
FIRST_Time = Nz(StaticVarGet( "FIRST_Time" ));
SECOND_TIME = Now(format = 4);
if( SECOND_TIME <= FIRST_Time + PAUSE_TIME ) _FLAG = -1;
printf("_FLAG = "+ NumToStr(_FLAG ,1.0)+"\n") ;
} |
Увы , этот вариант не работает ... В чем ошибка? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Может попробовать использовать функцию DateTimeAdd() вместо FIRST_Time + PAUSE_TIME
??? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
Может попробовать использовать функцию DateTimeAdd() вместо FIRST_Time + PAUSE_TIME
??? |
Попробовал... Реакции никакой ... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
Код: |
PAUSE_TIME = 8;
FIRST_Time = Now( format = 4 );
while (True)
{
SECOND_TIME = Now(format = 4);
if( (SECOND_TIME - FIRST_Time) >= PAUSE_TIME ) break;
printf("SECOND = "+ NumToStr((SECOND_TIME - FIRST_Time) ,1.0)+"\n") ;
} |
|
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
yser писал(а): |
Код: |
PAUSE_TIME = 8;
FIRST_Time = Now( format = 4 );
while (True)
{
SECOND_TIME = Now(format = 4);
if( (SECOND_TIME - FIRST_Time) >= PAUSE_TIME ) break;
printf("SECOND = "+ NumToStr((SECOND_TIME - FIRST_Time) ,1.0)+"\n") ;
} |
|
Увы, (( выдает Error 13 (бесконечный цикл while )
Как и во всех моих вариантах с этим циклом... Может что не так в настройках самого Ами ? |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
AleksP писал(а): |
Увы, (( выдает Error 13 (бесконечный цикл while )
Как и во всех моих вариантах с этим циклом... Может что не так в настройках самого Ами ? |
Стоит версия 5.90 - работает.
Поставил 6.20/6.30 - пишет об ошибке (бесконечный цикл while ). |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По моему AFL нельзя заставить надолго зависнуть в цикле... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Объясни зачем это надо. Может тогда что придумаем. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
По моему AFL нельзя заставить надолго зависнуть в цикле... |
Так он и не зависает. Он просто выдает ошибку и останавливает исполнение кода.... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
Объясни зачем это надо. Может тогда что придумаем. |
Ситуация такова :
По созревшему сигналу Ами готовит и отправляет (пишет в файл с ключём обновление ( не дополнение ) ) в каталоги Квиков (их несколько) параметры для выставления ордеров. Это важно, так как обратная связь -Квик => Ами исключается.
Квик читает файл , отсылает заявку...
На данный момент при формировании на стороне Ами приказа на ордер возможна отправка только одного приказа , так как второй и третий и последующие - тут же замещаются последним, и только этот, последний Квик и исполняет. Все происходит очень быстро. Нужна задержка между посылками приказов (записью в файл) для того, чтобы Квик спокойно обрабатывал каждый из них... На аналитическую работу Ами такая задержка не влияет, так как это не тест режим, а он-лайн, и приказы генерируются в конкретный момент времени, когда анализ уже состоялся , есть сигнал и полномочия передаются в программный автомат для генерации приказов Квику.
Как то так... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Есть функция fgetstatus() Позволяет посмотреть время создания файла. Запрети переписывать файл если он создан меньше чем Х секунд назад... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
Да, у меня 6.20.1
Вот кажется нашёл ка можно реализовать паузу
см. continue Keyword
Код: |
i = 0;
while ( i < 10 )
{
i++;
// Skip 5
if( i == 5 )
{
continue;
}
printf("Step " + i );
} |
Но не могу сообразить как сюда подставить числовые переменные (время) ... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
Есть функция fgetstatus() Позволяет посмотреть время создания файла. Запрети переписывать файл если он создан меньше чем Х секунд назад... |
Как я понимаю, эта функция выдает лишь момент старта паузы, но не саму паузу... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
000
Site Admin
![](images/avatars/183029264847fb5337d4ea4.gif)
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сравниваешь время сейчас и время создания файла. Если разница меньше чем Х, то не переписываешь файл.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
![](images/spacer.gif) |
AleksP
Зарегистрирован: 29.03.2018
Сообщения: 21
|
000 писал(а): |
не переписываешь файл.... |
Увы. Мне не знакома функция (способ, метод, и т.д) "не переписываешь файл" ... А , следовательно, для того, чтобы "не переписываешь файл" - надо выдержать ПАУЗУ.. Малейшее прикосновение к while =>> либо игнорируется АБСОЛЮТНО, либо просто "вешает " ВСЁ...(примеры могу прислать). Оговорюсь, простенький перебор по № бара , доступен...(пример опубликован здесь) . Но вот , очевидной , совершенно логичной, PAUSE = НЕТ ! Обидно. Получается - что Ами , только для около биржевой игры, А реально использовать он-лайн - опять УВЫ ... |
|
|
Посмотреть профиль Отправить личное сообщение |
![](images/spacer.gif) |
|