foxmag: В OnTick() организован бесконечный цикл. Есть ли возможность программно установить факт смены графика, осуществляемой вручную (например, перетаскиванием мышью)? Установлено, что изменений значений переменных _Symbol и _UninitReason при смене графика не происходит, поэтому их использовать как условие замены графика невозможно. Спасибо.
fxsaber:
А зачем засовывать бесконечные циклы в OnTick для такой задачи. Это же жестко в плане нагрузки на процессор. Chart функции одни из самых дорогих. Не проще ли через OnChartEventбез всяких циклов и Sleep- ов:
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long constdouble& dparam, // параметр события типа double conststring& sparam // параметр события типа string
)
{
if(id==CHARTEVENT_CHART_CHANGE)
{
staticconstlong Chart=ChartID();
staticstring PrevSymbol=_Symbol;
staticENUM_TIMEFRAMES PrevTF=_Period;
string Symb=ChartSymbol(Chart);
ENUM_TIMEFRAMES TF=ChartPeriod(Chart);
if((PrevSymbol!=Symb) || (PrevTF!=TF)) // ноль указывать НЕЛЬЗЯ!
{
PrevSymbol=Symb;
PrevTF=TF;
Alert(PrevSymbol+" "+EnumToString(PrevTF));
}
}
}
А зачем засовывать бесконечные циклы в OnTick для такой задачи. Это же жестко в плане нагрузки на процессор. Chart функции одни из самых дорогих. Не проще ли через OnChartEvent без всяких циклов и Sleep- ов:
В моем случае предлагаемый Вами способ не годится. Я использую бесконечный цикл для управления "живыми" управляющими объектами (ну, кнопками). И мне нужен был небольшой сервис для случая ручной замены графика. Вопрос решился чрезвычайно просто с помощью одной строки без какой бы то ни было "избыточной" нагрузки на процессор:
В моем случае предлагаемый Вами способ не годится. Я использую бесконечный цикл для управления "живыми" управляющими объектами (ну, кнопками). И мне нужен был небольшой сервис для случая ручной замены графика. Вопрос решился чрезвычайно просто с помощью одной строки без какой бы то ни было "избыточной" нагрузки на процессор:
Chart определен выше у fxsaber.
Спасибо за участие.
Вы не поняли мою мысль.
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь. Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь. Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
тогда Ваша очень "дорогая" строчка в OnTick будет выглядеть следующим образом:
и на эту процедуру, уверяю Вас, суммарно времени на выяснение ручной замены графика будет тратиться в тысячи раз меньше.
Бесконечный цикл. Нет ОнТика и ОнЧартИвента. Только хардкор )
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь. Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
тогда Ваша очень "дорогая" строчка в OnTick будет выглядеть следующим образом:
и на эту процедуру, уверяю Вас, суммарно времени на выяснение ручной замены графика будет тратиться в тысячи раз меньше.
В OnTick() организован бесконечный цикл. Есть ли возможность программно установить факт смены графика, осуществляемой вручную (например, перетаскиванием мышью)? Установлено, что изменений значений переменных _Symbol и _UninitReason при смене графика не происходит, поэтому их использовать как условие замены графика невозможно. Спасибо.
А зачем засовывать бесконечные циклы в OnTick для такой задачи.
Это же жестко в плане нагрузки на процессор. Chart функции одни из самых дорогих.
Не проще ли через OnChartEvent без всяких циклов и Sleep- ов:
А зачем засовывать бесконечные циклы в OnTick для такой задачи.
Это же жестко в плане нагрузки на процессор. Chart функции одни из самых дорогих.
Не проще ли через OnChartEvent без всяких циклов и Sleep- ов:
В моем случае предлагаемый Вами способ не годится. Я использую бесконечный цикл для управления "живыми" управляющими объектами (ну, кнопками). И мне нужен был небольшой сервис для случая ручной замены графика. Вопрос решился чрезвычайно просто с помощью одной строки без какой бы то ни было "избыточной" нагрузки на процессор:
Chart определен выше у fxsaber.
Спасибо за участие.
В моем случае предлагаемый Вами способ не годится. Я использую бесконечный цикл для управления "живыми" управляющими объектами (ну, кнопками). И мне нужен был небольшой сервис для случая ручной замены графика. Вопрос решился чрезвычайно просто с помощью одной строки без какой бы то ни было "избыточной" нагрузки на процессор:
Chart определен выше у fxsaber.
Спасибо за участие.
Вы не поняли мою мысль.
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь.
Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
тогда Ваша очень "дорогая" строчка в OnTick будет выглядеть следующим образом:
и на эту процедуру, уверяю Вас, суммарно времени на выяснение ручной замены графика будет тратиться в тысячи раз меньше.
Вы не поняли мою мысль.
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь.
Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
тогда Ваша очень "дорогая" строчка в OnTick будет выглядеть следующим образом:
и на эту процедуру, уверяю Вас, суммарно времени на выяснение ручной замены графика будет тратиться в тысячи раз меньше.
Бесконечный цикл. Нет ОнТика и ОнЧартИвента. Только хардкор )
Вы не поняли мою мысль.
Попробуйте сделать профилирование и Вы ахнете, какая медленная функция ChartSymbol. Если вы будете выполнять эту функцию на каждом тике, да еще в цикле, то поймете, насколько это большая роскошь.
Гораздо проще определить глобальную переменную, скажем Cur_Symbol, и вычислять ее именно в OnChartEvent при наступления события CHARTEVENT_CHART_CHANGE
тогда Ваша очень "дорогая" строчка в OnTick будет выглядеть следующим образом:
и на эту процедуру, уверяю Вас, суммарно времени на выяснение ручной замены графика будет тратиться в тысячи раз меньше.
Простите, был невнимателен, Вы правы. Спасибо.