Ошибки, баги, вопросы - страница 2233

 
TheXpert:

попробуйте после открытия файла на запись (часть 1 кода) просмотреть его виндовым просмотрщиком. будет хотя бы понятно с каким хендлом проблема.

если откроет - со вторым, если нет - с первым.

Винда то первый файл открывает. Вижу на уровне системы, что установлены флаги read, write, share_read. Однако в терминале открытие того же файла на чтение выдает 5004. Первым советником в файл производится запись, т.е. он не просто для проформы открыт с какими-то флагами.

Когда будет время, попробую сделать скрипт для демонстрации. Но судя по тому, что я уже не первый про это пишу, и никаких наворотов, связанных с файлами, в коде нет, кривизна присутствует.

PS. Может кто уже писал в СД? Какие есть ответы?

 
A100:
Строго говоря ошибка связана с одновременным вызовом FileOpen( filename ) из разных советников (флаги роли не играют)
флаг FILE_SHARE_READ собственно и обозначает неэксклюзивный доступ на чтение, по крайней мере в winapi оригинале
 
Stanislav Korotky:

Винда то первый файл открывает.

значит второй хендл несмотря на флаг хочет эксклюзивный доступ на чтение или другой неразрешенный доступ.
 
A100:
Объясните что такое искуственно созданная ошибка? Я не понимаю этой фразы

Ни какого срытого подтекста в моих словах нет. Вы наверное понимаете что такое искусственная кожа. Ориентируйтесь на это понимание.

Покажите код без дополнительных манипуляций с применением шаблонов и прочих танцев с бубнами, который возвращает ошибку ERR_CANNOT_OPEN_FILE при флагах FILE_SHARE_READ|FILE_SHARE_WRITE

Если без танцев с бубнами ошибка не воспроизводится, значит ошибка вызвана во время танцев...

Повторяю последовательность действий:

Советник 1:

В OnInit бинарный файл открыт для записи.

Каждую минуту пишет в файл открытие текущего бара.

Файл закрывается ТОЛЬКО в OnDeinit.

Советник 2:

Каждую минуту открывает этот бинарный файл.

Читает последнюю запись, печатает её.

Закрывает файл.

И так повторяет каждую минуту.


При этом не возникает никаких ошибок открытия файла.

 

Вот на это простом скрипте, запущенном сперва с writing = true, а потом на другом чарте с writing = false, получаю ошибку.

#property script_show_inputs

input bool writing = false;

int OnStart()
{
  int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:0));
  if(handle == INVALID_HANDLE)
  {
    Print("FileOpen failed: ", GetLastError());
    return INIT_FAILED;
  }
  
  if(writing) FileWriteInteger(handle, 0);
  
  Print("handle=", handle);
  
  while(!IsStopped())
  {
    Sleep(1000);
  }

  Print("Closing");
  FileClose(handle);

  return 0;
}
 
Andrey Khatimlianskii:

Насколько я помню, там настраивается тайм-аут, после которого цена считается безнадежно устаревшей. То есть если не менялась 3 минуты, то открываться по ней нельзя.

Написал тестовый скрипт этого дела. Словил NoPrice через 64 секунды, как пришел последний тик. Возможно, минутный таймаут, действительно, стоит. Помониторю...

 
Stanislav Korotky:

Вот на это простом скрипте, запущенном сперва с writing = true, а потом на другом чарте с writing = false, получаю ошибку.

Явно баг, т.к. с подобными флагами сторонние приложения файл читают без проблем.

 
Stanislav Korotky:

PS. Может кто уже писал в СД? Какие есть ответы?

Я писал два года назад - заявка без движения. Напишите еще раз пожалуйста
 
A100:
Я писал два года назад - заявка без движения. Напишите еще раз пожалуйста

Какой номер заявки?

 
Заспамил
Result.retcode = 10026
Result.comment = AutoTrading disabled by server 0.035 ms
При этом OrderCheck возвращает true.