Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  14:21[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83902

18-11-2024 13:59
Как запустить поток для фрейма?
В отдельном модуле имею TfrUn = class(TFrame) в нём есть TMemo, в нём очень большой обработчик действий, которые в свою очередь оказывают влияние на другие элементы этого фрейма и основного модуля (Обработчик обрабатывает все изменения в TMemo, перебирает все строки при любом изминении). Но как таковой переменной в фрейме frUn: TfrUn; не объявляется.
В основном модуле есть pcProg: TPageControl; в нём динамически создаю страницу и создаю экземпляр объект типа  TfrUn, вновь созданную страницу назначаю родителем для вновь созданного TfrUn. Т. е. на каждой странице свой фрейм с TMemo у которой свои обработчики событий.
И вот когда в TMemo много строк прога начинает тупить. Хочу для каждого вызова обработчика TMemo запускать поток.
Вот мне и не снятся с ручника. Если запускать поток и в Execute вызывать этот обработчик, дак в модуле фрейма конкретно переменной frUn нет и я не могу обратится из Execute к обработчику TfrUn.
В общем я упёрся. Помогите, люди добрые.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

17-12-2024 05:58
Как я понимаю, TMemo получает данные от пользователя? Тогда есть как минимум несколько вариантов для оптимизации:
1. Запускать обработчик не сразу по вводу данных от пользователя, а по некоторой задержке. Например, 500мс. Понятно, что время задержки зависит от типа данных и может даже меняться в зависимости от ряда параметров (например, мы выяснили, что при фильтрации через 300мс обработчик всё-равно прерывается через 400мс, что говорит о том, что пользователь просто сам тупит и надо таймаут увеличивать... какое условие, по которому можно будет уменьшать таймаут я не придумал, так что он просто сбрасывается в настройку по умолчанию при перезапуске приложения).
2. TMemo это не самоцель, а хранилище данных. Потому, он фактически хранит String, или TStrlingList, если менее общно. Так что можно по таймауту вычитывать этот string/TStringList, отдавать его потоку, чтобы тот начинал работать. Ну а если придёт новая пачка данных, а предыдущая ещё не будет обработана - тогда прерывать ранее запущенный поток, создавать новый и ему передавать новую пачку данных.

19-11-2024 10:05 | Вопрос к автору: запрос дополнительной информации
>>> Если запускать поток и в Execute вызывать этот обработчик, дак в модуле фрейма конкретно переменной frUn нет и я не могу обратится из Execute к обработчику TfrUn.
  Насколько я понимаю, вам нужно из "дополнительного потока", обратиться к Memo в основном (синхронизовать данные). При этом, не изменяя, ни класса "дополнительного потока", ни "основного"?

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Какой месяц идет после марта?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования