Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Перевод с QPILE на AFL Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пн Янв 13, 2020 2:21 pm Ответить с цитатой Вернуться к началу

Доброго дня!
Вопрос о паузе (остановке исполнения кода) на заданное время (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") ;

}

Увы , этот вариант не работает ... В чем ошибка?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Янв 15, 2020 10:33 am Ответить с цитатой Вернуться к началу

Может попробовать использовать функцию DateTimeAdd() вместо FIRST_Time + PAUSE_TIME
???

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Чт Янв 16, 2020 2:44 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Может попробовать использовать функцию DateTimeAdd() вместо FIRST_Time + PAUSE_TIME
???


Попробовал... Реакции никакой ...
Посмотреть профиль Отправить личное сообщение
yser



Зарегистрирован: 30.11.2011
Сообщения: 76

СообщениеДобавлено: Чт Янв 16, 2020 10:06 pm Ответить с цитатой Вернуться к началу

Код:
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") ;
}
Посмотреть профиль Отправить личное сообщение
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Чт Янв 16, 2020 10:45 pm Ответить с цитатой Вернуться к началу

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 )
Как и во всех моих вариантах с этим циклом... Может что не так в настройках самого Ами ?
Посмотреть профиль Отправить личное сообщение
yser



Зарегистрирован: 30.11.2011
Сообщения: 76

СообщениеДобавлено: Пт Янв 17, 2020 8:58 am Ответить с цитатой Вернуться к началу

AleksP писал(а):

Увы, (( выдает Error 13 (бесконечный цикл while )
Как и во всех моих вариантах с этим циклом... Может что не так в настройках самого Ами ?


Стоит версия 5.90 - работает.
Поставил 6.20/6.30 - пишет об ошибке (бесконечный цикл while ).
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Янв 17, 2020 9:34 am Ответить с цитатой Вернуться к началу

По моему AFL нельзя заставить надолго зависнуть в цикле...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Янв 17, 2020 9:40 am Ответить с цитатой Вернуться к началу

Объясни зачем это надо. Может тогда что придумаем.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пт Янв 17, 2020 1:16 pm Ответить с цитатой Вернуться к началу

000 писал(а):
По моему AFL нельзя заставить надолго зависнуть в цикле...


Так он и не зависает. Он просто выдает ошибку и останавливает исполнение кода....
Посмотреть профиль Отправить личное сообщение
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пт Янв 17, 2020 1:32 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Объясни зачем это надо. Может тогда что придумаем.


Ситуация такова :
По созревшему сигналу Ами готовит и отправляет (пишет в файл с ключём обновление ( не дополнение ) ) в каталоги Квиков (их несколько) параметры для выставления ордеров. Это важно, так как обратная связь -Квик => Ами исключается.
Квик читает файл , отсылает заявку...
На данный момент при формировании на стороне Ами приказа на ордер возможна отправка только одного приказа , так как второй и третий и последующие - тут же замещаются последним, и только этот, последний Квик и исполняет. Все происходит очень быстро. Нужна задержка между посылками приказов (записью в файл) для того, чтобы Квик спокойно обрабатывал каждый из них... На аналитическую работу Ами такая задержка не влияет, так как это не тест режим, а он-лайн, и приказы генерируются в конкретный момент времени, когда анализ уже состоялся , есть сигнал и полномочия передаются в программный автомат для генерации приказов Квику.
Как то так...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Янв 17, 2020 1:43 pm Ответить с цитатой Вернуться к началу

Есть функция fgetstatus() Позволяет посмотреть время создания файла. Запрети переписывать файл если он создан меньше чем Х секунд назад...

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пт Янв 17, 2020 4:57 pm Ответить с цитатой Вернуться к началу

Да, у меня 6.20.1

Вот кажется нашёл ка можно реализовать паузу
см. continue Keyword
Код:
i = 0;
while ( i < 10 )
{
  i++;
  // Skip 5
  if( i == 5 )
  {
    continue;
  }
  printf("Step " + i );
}


Но не могу сообразить как сюда подставить числовые переменные (время) ...
Посмотреть профиль Отправить личное сообщение
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пт Янв 17, 2020 4:59 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Есть функция fgetstatus() Позволяет посмотреть время создания файла. Запрети переписывать файл если он создан меньше чем Х секунд назад...


Как я понимаю, эта функция выдает лишь момент старта паузы, но не саму паузу...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Янв 17, 2020 5:26 pm Ответить с цитатой Вернуться к началу

Сравниваешь время сейчас и время создания файла. Если разница меньше чем Х, то не переписываешь файл....

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
AleksP



Зарегистрирован: 29.03.2018
Сообщения: 21

СообщениеДобавлено: Пт Янв 17, 2020 9:39 pm Ответить с цитатой Вернуться к началу

000 писал(а):
не переписываешь файл....

Увы. Мне не знакома функция (способ, метод, и т.д) "не переписываешь файл" ... А , следовательно, для того, чтобы "не переписываешь файл" - надо выдержать ПАУЗУ.. Малейшее прикосновение к while =>> либо игнорируется АБСОЛЮТНО, либо просто "вешает " ВСЁ...(примеры могу прислать). Оговорюсь, простенький перебор по № бара , доступен...(пример опубликован здесь) . Но вот , очевидной , совершенно логичной, PAUSE = НЕТ ! Обидно. Получается - что Ами , только для около биржевой игры, А реально использовать он-лайн - опять УВЫ ...
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen