Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да нет, нужно просто синхронизировать работу 3-х потоков (по сути на писать Synchronizer), но
не знаю как.
Ну, остаются только флаги. Выставляем флаг, ждем когда остальные завершат деятельность, остановятся и снимут свои флаги, делаем дела, снимаем флаг. Ну, и логика приоритетов флагов, ясное дело.
ДДЕ я бы все-таки не останавливал, пусть в буфер пишет, чтобы ничего не пропало.
Ну, остаются только флаги. Выставляем флаг, ждем когда остальные завершат деятельность, остановятся и снимут свои флаги, делаем дела, снимаем флаг. Ну, и логика приоритетов флагов, ясное дело.
ДДЕ я бы все-таки не останавливал, пусть в буфер пишет, чтобы ничего не пропало.
Т.е в Синхронайзере нужно сделать буфер входяших функций, которые в зависимости от приоритета будут исполняться?
Т.е в Синхронайзере нужно сделать буфер входяших функций, которые в зависимости от приоритета будут исполняться?
Нет, просто приостанавливать поток(и) по соответствующим флагам и их приоритету. В этом варианте вообще больше ничего не надо.
Второй вариант, дождаться окончания функции потока, и тогда остановить уже по его флагу. Это м.б. нужно, например, чтобы обновились аск-бид, индикаторы и что-то еще нужное.
Например, значения флага.
0 - поток стоит,
1 - поток работает,
2 - запрос на остановку всех младших по приоритету потоков.
Выставляем 2, ждем пока все не станут 0, выполняем прогу, ставим в 0 или 1. По этому флагу все остальные возобновляют работу.
Нет, просто приостанавливать поток(и) по соответствующим флагам и их приоритету. В этом варианте вообще больше ничего не надо.
Второй вариант, дождаться окончания функции потока, и тогда остановить уже по его флагу. Это м.б. нужно, например, чтобы обновились аск-бид, индикаторы и что-то еще нужное.
Например, значения флага.
0 - поток стоит,
1 - поток работает,
2 - запрос на остановку всех младших по приоритету потоков.
Выставляем 2, ждем пока все не станут 0, выполняем прогу, ставим в 0 или 1. По этому флагу все остальные возобновляют работу.
Вы же сами писали, что DDE приостанавливать не хорошо
Вы же сами писали, что DDE приостанавливать не хорошо
Просто вас не понял.
Я делаю так.
1.Сервер (у меня ТСР-сервер) в своем потоке постоянно пишет данные в коллекцию типа последним вошел-первым вышел. Его останавливать не надо.
2. Из коллекции в другом потоке данные читаются-удаляются и пишутся в DataTable (это аналог таблицы БД, но в памяти). Уже этот поток можно приостановить, если он мешает.
3. еще поток читает данные из DataTable для анализа. Он никак не мешает потоку 2, т.к. выборка идет по select и в эту таблицу никто кроме 2 записи не производит. Этот поток тоже можно приостановить, если мешает.
ЗЫ мне ничего не приходится останавливать, т.к. работаю с одним инструментом и поток 3 переключается на подачу-исполнением заявок и сопровождение сделок.
Просто вас не понял.
Я делаю так.
1.Сервер (у меня ТСР-сервер) в своем потоке постоянно пишет данные в коллекцию типа последним вошел-первым вышел. Его останавливать не надо.
2. Из коллекции в другом потоке данные читаются-удаляются и пишутся в DataTable (это аналог таблицы БД, но в памяти). Уже этот поток можно приостановить, если он мешает.
3. еще поток читает данные из DataTable для анализа. Он никак не мешает потоку 2, т.к. выборка идет по select и в эту таблицу никто кроме 2 записи не производит. Этот поток тоже можно приостановить, если мешает.
ЗЫ мне ничего не приходится останавливать, т.к. работаю с одним инструментом и поток 3 переключается на подачу-исполнением заявок и сопровождение сделок.
Вам везёт, у меня 52 инструмента, так что придётся переключаться
Вам везёт, у меня 52 инструмента, так что придётся переключаться
Я так понял, что анализ всех 52 инструментов идет в одном потоке? Или нет?
В качестве Storage что используется? В моем случае, при многопользовательском доступе блокировка не нужна и чтение не мешает записи.
Единственное, что нужно блокировать, это совместный доступ Child к trans2quik. И только в случае множества потоков Child. А это можно сделать организовав trans2quik в отдельном потоке и вызывать по событию и одновременно блокировать обработчик события до окончания работы с заявкой. Остальные не достучатся.)
Совсем забросил идею связать МТ5 и Квик, остановился только на Квик (DEE server + trans2quik.dll)
Очень жаль. А в чем причина такого решения, есть серьёзные преграды в получении\передачи данных между двумя программами?
Я так понял, что анализ всех 52 инструментов идет в одном потоке? Или нет?
В качестве Storage что используется? В моем случае, при многопользовательском доступе блокировка не нужна и чтение не мешает записи.
Единственное, что нужно блокировать, это совместный доступ Child к trans2quik. И только в случае множества потоков Child. А это можно сделать организовав trans2quik в отдельном потоке и вызывать по событию и одновременно блокировать обработчик события до окончания работы с заявкой. Остальные не достучатся.)
Нет, сам анализ происходит в Child (отдельно, по каждому инструменту) Selector(1,2) выбираают, какому роботу отдать данные и колбэки
Storage - просто таблицы, которые хранятся в памяти
Очень жаль. А в чем причина такого решения, есть серьёзные преграды в получении\передачи данных между двумя программами?
Просто нет смысла городить огород.
Используя МТ 5 нужен код в советнике и DLL, которая будкт принимать данные.
Используя только Квик, у нас только одно приложение (см. рис. с диаграммой)