Проблема в том что когда работает бесконечный цикл проверки
while(true), то некоторые кнопки на торговой панели не нажимаются
(игнорируются кнопки закрытия
позиций или кнопка свернуть панель),
а если убрать
оператор while(true), то панель моргает бесконечно
Чем можно заменить этот оператор чтобы и не моргало и кнопки нажимались?
Покажите полностью код, т.к. не понятно где Вы его вызываете. Есть подозрение что логика написана неправильно, но не видя кода это гадание на кофейной гуще.
Покажите полностью код, т.к. не понятно где Вы его вызываете. Есть подозрение что логика написана неправильно, но не видя кода это гадание на кофейной гуще.
Код большой 4000 строк, нет смысла его выкладывать, голова взорвётся.
Сам оператор при постоянном цикле не даёт моргать
панели и так же не даёт некоторым функциям реагировать на нажатие, его надо чем-то заменить.
Panel() вызывается
в OnInit(), OnTimer(), OnTick()
Проблема в том что когда работает бесконечный цикл проверки
while(true), то некоторые кнопки на торговой панели не нажимаются
(игнорируются кнопки закрытия
позиций или кнопка свернуть панель),
а если убрать
оператор while(true), то панель моргает бесконечно
Чем можно заменить этот оператор чтобы и не моргало и кнопки нажимались?
Все верно. пока цикл крутится, ничего работать не будет. Многопоточность? Не, не слышали
Код большой 4000 строк, нет смысла его выкладывать, голова взорвётся.
Сам оператор при постоянном цикле не даёт моргать
панели и так же не даёт некоторым функциям реагировать на нажатие, его надо чем-то заменить.
Panel() вызывается
в OnInit(), OnTimer(), OnTick()
Пользуйтесь событиями (Timer, ChartEvent), а не бесконечными циклами.
Не помогает, без while(true) всё моргает, а с этим оператором всё чистенько работает без лагов.
Не помогает, без while(true) всё моргает, а с этим оператором всё чистенько работает без лагов.
Мерцает из-за того, что удаляете объекты и отображаете их заново. Объект нужно один раз создать и потом только обновлять его состояние. Если уж удаляется объект, то по крайней мере до следующего тика, а не с тем, чтобы тут же его заново отобразить.
Не помогает, без while(true) всё моргает, а с этим оператором всё чистенько работает без лагов.
Чистенько работает, потому, что не работает, а гонит бесконечный цикл без пауз. Всё стоит, оттого и чистенько.
Сделайте паузу в конце цикла - этой паузой воспользуются асинхронные операции и программа оживёт.
Маленькая пауза - будет моргать экран, большая - снизится эффективность циклических операций. Ищите оптимальную.
Ну и минимизировать операции перерисовки, здесь я полностью согласен с Игорем.
Кстати, полный аналог Вашего кода:
void Panel(){ while ( !IsStopped()){ // Цикл, пока нет команды отмены RefreshRates(); // Обновить котировки if (IsConnected()) TradePanel() // Если есть соединение с сервером, то TradePanel else ObjectTradePanel(); // Если соединения нет, то ObjectTradePanel WindowRedraw(); // Обновить экран Sleep(200);}} // Пауза 200 мс
Нет желания показать два вызываемых модуля?
Код большой 4000 строк, нет смысла его выкладывать, голова взорвётся.
Сам оператор при постоянном цикле не даёт моргать
панели и так же не даёт некоторым функциям реагировать на нажатие, его надо чем-то заменить.
Panel() вызывается
в OnInit(), OnTimer(), OnTick()
В OnInit закрывать позицию некошерно.
Да и в Panel у Вас только проверка на соединение с сервером. 2-3 логические ошибки могут легко разрушить код из 4000 операторов.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проблема в том что когда работает бесконечный цикл проверки while(true), то некоторые кнопки на торговой панели не нажимаются
(игнорируются кнопки закрытия позиций или кнопка свернуть панель),
а если убрать оператор while(true), то панель моргает бесконечно
Чем можно заменить этот оператор чтобы и не моргало и кнопки нажимались?