Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2008, 23:08   #11
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Не знаю, чем именно Вам помочь. Что за "устройство" Вы не говорите, как читаете не показываете, а угадывать не хочется.
А это не имеет никакого отношения к делу. Можно считывать данные из файла а не с устройства -- будет происходить такая же абсолютно пауза. Вопрос и состоял в том, как бы убрать эти задержки.
Цитата:
Ни один нормальный девайс не проектируют так, чтобы он устраивал флуд-атаки на свой же компьютер и чтобы данные с него нельзя было читать на сколь угодно медленной и сколь угодно загруженой машине.
Дело в том, что иногда данные нужно не просто получать, а отслеживать их динамику. Никому не нужен аппарат измеряющий сосудистое давление (а соответсвенно и сердцебиение) которые считывает данные раз в минуту. Задачи разные бывают, иногда надо просто передать текстовое сообщение, а иногда отслеживать перегрузки.
Цитата:
Если Это устройство Вашей собственной разработки, значит сделано оно неправильно, если от восточного соседа, значит в мусорку его, а "другого устройства не будет" - это странный аргумент...
Это не странный аргумент. Есть клиент, который хочет получить софт под виндовс для работы с устройством которое он предоставил. И говорить ему "да ты лох, иди отсюда", по моему, не самый лучший вариант.

Собственно решение проблеммы оказалось в следующем - из потока надо было убрать все обращения к визуальным компонентам, после чего исчезли "тормоза" , которые возникали раньше при попытках перетащить форму или еще что-нить с ней сделать. Как я понял метод Sinсhronize (или как его там) не творит никаких чудес, а делает сначала компоненту Lock, а после изменения UnLock, в результате чего при, например, отрисовки формы, процес встает в паузу при попытке что-то сделать с формой как и сама программа.
Sergey2 вне форума Ответить с цитированием
Старый 01.06.2008, 00:15   #12
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
А это не имеет никакого отношения к делу. Можно считывать данные из файла а не с устройства -- будет происходить такая же абсолютно пауза. Вопрос и состоял в том, как бы убрать эти задержки.
Для того, чтобы ответить на такой вопрос, нужно знать, как Вы пытаетесь это делать. А в том, чтобы задавать на форуме риторические вопросы, а потом "секретничать" лично я вообще не вижу никакого смысла.

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Дело в том, что иногда данные нужно не просто получать, а отслеживать их динамику. Никому не нужен аппарат измеряющий сосудистое давление (а соответсвенно и сердцебиение) которые считывает данные раз в минуту. Задачи разные бывают, иногда надо просто передать текстовое сообщение, а иногда отслеживать перегрузки.
И что с того? Опять размышления ни о чём. На Space Shuttle до недавнего времени стояли древние восьмиразрядные машины, и ничего, справлялись.

Цитата:
Сообщение от Sergey2 Посмотреть сообщение
Собственно решение проблеммы оказалось в следующем - из потока надо было убрать все обращения к визуальным компонентам, после чего исчезли "тормоза" , которые возникали раньше при попытках перетащить форму или еще что-нить с ней сделать. Как я понял метод Sinсhronize (или как его там) не творит никаких чудес, а делает сначала компоненту Lock, а после изменения UnLock, в результате чего при, например, отрисовки формы, процес встает в паузу при попытке что-то сделать с формой как и сама программа.
Тормоза возникали от того, что Вы неверно писали программу, я, например, больше чем уверен в этом, и каждый Ваш пост эту уверенность только укрепляет. Метод Synchronize это просто критическая секция, не дающая двум потокам одновременно модифицировать и читать при этом объекты VCL. Реализация очень странная для такой уважаемой фирмы, как Борланд, но тем не менее, совершенно не представляю, зачем Вам понадобилось обращение к форме из потока, читающего данные с драйвера. Одним словом, если есть конкретные вопросы - давайте, нет - какой смысл продолжать эту полемику?
B_N вне форума Ответить с цитированием
Старый 01.06.2008, 10:24   #13
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Если уже реально не хочется переключений, то всю операцию с чтением буфера в потоке объявляем как критическую секцию. Любите играться с приоритетами, ставьте приоритет не только потоку, но и процессу.

Цитата:
Собственно решение проблемы оказалось в следующем - из потока надо было убрать все обращения к визуальным компонентам, после чего исчезли "тормоза" , которые возникали раньше при попытках перетащить форму или еще что-нить с ней сделать.
Странно, вот есть у меня программка. Вот всё как у вас: поток и интерфейс, и обращения из потока в интерфейс, но почему-то тормозов я не вижу.
zetrix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLL, потоки BOBAH13 Общие вопросы Delphi 23 27.02.2008 20:43
Нечто подобное таймеру Артэс Общие вопросы C/C++ 8 11.02.2008 19:19
работа с принтером (ну или что-то подобное) Рустам Win Api 2 03.02.2008 16:24
Потоки в С Raptor Помощь студентам 1 07.01.2008 21:12