Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не можешь найти ответ на вопрос? Воспользуйся поиском!
Alexey Volchanskiy
16235
Alexey Volchanskiy 2015.10.15 02:36 

Есть такая задача. На компе работают 10 терминалов, на каждом крутится один и тот же советник. Нет смысла всем 10 выполнять довольно тяжелые вычисления. Хочу сделать одного Master, остальные Slave's. Мастер делает расчеты и пишет инфу в общий файл, слейвы ее читают и далее отрабатывают "легкую" часть алгоритма.

И тут возникает проблема, а что, если мастер еще не все записал, а слейвы уже начали читать? В маркете нельзя использовать Win Api, так бы я мьютекс завел и проблема решена. Пока сделал так - Мастер перед записью данных взводит в самом начале файла флаг типа int, ждет какое-то время, пишет данные, потом флаг сбрасывает. Тоже криво и небезопасно, но лучше не придумал. Ну нет в MQL4/5 атомарных операций.

Кто чего посоветует/покритикует?


Vladimir Tkach
18002
Vladimir Tkach 2015.10.15 05:39  
На слейвах можно задать проверку времени последнего изменения файла.
Andrey Khatimlianskii
55863
Andrey Khatimlianskii 2015.10.15 06:49  
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
Artyom Trishkin
Модератор
73996
Artyom Trishkin 2015.10.15 07:19  
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону
Andrey Khatimlianskii
55863
Andrey Khatimlianskii 2015.10.15 07:29  
Artyom Trishkin:
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону

Это не решает озвученную проблему:

Alexey Volchanskiy:

И тут возникает проблема, а что, если мастер еще не все записал, а слейвы уже начали читать

Artyom Trishkin
Модератор
73996
Artyom Trishkin 2015.10.15 07:44  
Andrey Khatimlianskii:

Это не решает озвученную проблему:

А-а-а, СемёёёнСемёёёныч...

1. А возможно на лету менять флаг совместного доступа к файлу?

2. У мастера сделать флаг разрешения чтения файла слейвами, а слейвы должны сигналить флагами о завершении чтения.

Alexey Volchanskiy
16235
Alexey Volchanskiy 2015.10.15 09:11  
Artyom Trishkin:
Сам факт изменения файла. Делал индикатор, который работает с таймером и пересчитывает данные лишь при изменении файла. Сейчас точно не скажу - нет под рукой, но покопайте в эту сторону
У меня размер файла не меняется, только данные. Можно конечно вычислять и запоминать контрольную сумму, но это накладно.
Alexey Volchanskiy
16235
Alexey Volchanskiy 2015.10.15 09:12  
Andrey Khatimlianskii:
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
Я сейчас сделал метку в 1 байт в начале файла, вроде работает. Блок данных небольшой.
Alexey Volchanskiy
16235
Alexey Volchanskiy 2015.10.15 09:13  
Artyom Trishkin:

А-а-а, СемёёёнСемёёёныч...

1. А возможно на лету менять флаг совместного доступа к файлу?

2. У мастера сделать флаг разрешения чтения файла слейвами, а слейвы должны сигналить флагами о завершении чтения.

Я так понимаю, в MQL4 менять атрибуты открытого файла нельзя.
George Merts
3527
George Merts 2015.10.15 09:50  

На мой взгляд, разумнее не писать метку в начало файла, а создавать и удалять файл-метку. Мастер - перед записью создает файл-метку, и начинает запись. Когда все посчитано и записано - файл-метка удаляется.

Слейвы - перед чтением - проверяют существование файл-метки, и считывают данные только в случае его отсутствия.

Vasiliy Sokolov
21151
Vasiliy Sokolov 2015.10.15 09:50  
Andrey Khatimlianskii:
Дополнительный файл-семафор либо специальная метка в конце файла с данными, означающая корректность записи. Лучше доп. файл, чтоб зря не читать (возможно) большой файл данных.
Вот в том-то и дело, что придется постоянно обращаться к файлу и читать его содержимое. Протирать дырку на HDD в общем. Тема это больная для МТ. Ренат вроде обещал штатную БД - это сняло бы сразу все проблемы разом. Но, во-первых, обещанного от MQ можно ждать годами, а во вторых обещание было только по поводу МТ5 и никак МТ4, хотя почему так - странно. 
/ /1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий