Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

Независимый Timer   Найти похожие ветки 

 
Yuri Btr   (2002-07-03 11:28) [0]

Ув. мастера как сделать так, чтобы Timer в моей программе не тормозился при больших вычислениях. Очевидно вынести его в отдельный поток?
Такой вопрос где то уже задавался, но к сожалению не могу его найти. Заранее спасибо.


 
Skier   (2002-07-03 11:33) [1]

>Yuri Bt
А Application.ProcessMessages не спасёт гиганта мысли и
отца русской демократии ? :)


 
Fiend   (2002-07-03 11:33) [2]

точно.
или найди в инэте, где то есть компонент TThreadTimer


 
Yuri Btr   (2002-07-03 11:40) [3]

to Skier
Application.ProcessMessages не всегда помогает. К тому же отставание всё равно будет. Т.к. невозможно позасовывать Application.ProcessMessages в каждую паузу между операторами.

to Fiend
К сожалению мне нужно использовать только стандартные компоненты Delhi. Я где то видел как это делается руками над простым TTimer


 
Skier   (2002-07-03 11:45) [4]

>Yuri Btr
Посмотри Bluecave Components v.1.0.0 (с исходными текстами)
http://www.torry.net/middle.htm


 
T2   (2002-07-03 11:59) [5]

Можно привязываться к системному времени или к тикам.


 
Yuri Btr   (2002-07-03 13:11) [6]

Ну что, больше идей нет?
Я просмотрел несколько компонент - таймеров, которые позволяют задать приоритет, но они все почти одинаково работают...
Пожалуйста, мастера помогите!


 
qube   (2002-07-03 14:01) [7]

Логичнее не таймер засунуть в отдельный поток, а большие вычисления. Лезешь в New/Thread Object, и в созданном классе все свои большие вычисления реализуешь в методе Execute.


 
Yuri Btr   (2002-07-03 14:05) [8]

to qube
В ообщем то логичное предложение, но дело в том, что у меня на форме присутствуют в разных местах ListBox"ы и надо добавлять в них много Items (при этом прога тормозится). Для этого не очень удобно использовать Threads.


 
Digitman   (2002-07-03 14:07) [9]

>Yuri Btr

<qube> прав на все 100%. Прислушайся к его совету. Осн. поток, который должен как можно оперативней реагировать на таймерные события, должен быть избавлен от длительных (сравнимых по времени с периодом таймера) вычислительных алгоритмов, стартующих в контексте неких событий/сообщений, обрабатываемых в этом же (основном) потоке.


 
qube   (2002-07-03 14:52) [10]

Большие вычисления -- это одно, а обновление элементов управления на форме -- это совсем другое. Нельзя производить обработку событий в одном потоке, при этом обновляя содержимое листбоксов в другом потоке, могут возникнуть непредсказуемые трудноуловимые глюки. Оптимизируй код. Вместо Listbox.Items.Add в цикле попробуй так:

var
NewItems: TStrings;
begin
NewItems := TStringList.Create;
... // добавляем в NewItems нужные элементы
ListBox.Items := NewItems;
NewItems.Free;
end;


 
Yuri Btr   (2002-07-03 15:05) [11]

to qube, to Digitman
Большое вам спасибо за дельные советы.
Действительно оптимизация дала положительный результат - наверно этим мы просто избавили ListBox прорисовывать лишний раз новые Items.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
1-47447
Azo
2002-07-03 12:30
2002.07.15
Преобразование таблицы.


3-47168
Als
2002-06-19 09:22
2002.07.15
Блокировка записи


1-47330
Explorer
2002-07-01 12:13
2002.07.15
Поиск в DBGrid


7-47835
Крутов Алексей
2002-04-16 10:38
2002.07.15
Вопрос по реестру


1-47302
Adm. Beckett
2002-06-30 14:27
2002.07.15
выделение строк цветом в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский