![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
время в потоке [D5, Win95/98]
appendix © (2004-09-19 12:29:00)В моём приложении нужно выводить текущее время в StatusBar'е.
Хотел это дело организовать через поток.
Всё работает. Но приложение начинает страшно тормозить.
Особенно когда хочу открыть новый файл.
Когда вручную отключаю поток, торможение прекращается.
Я почему-то думал раньше, что потоки они нужны чтоб параллельно выполнять задачи.
И не тормозить основной процесс.
В чём я не прав?
Как правильно организовать вывод текущего времени с секундами?
Defunct (2004-09-21 19:28:00) [1]Я, обычно, приоритет устанавливаю в перекрытом конструкторе потока. Priority := tpIdle, но можно и просто Thread.Priority := tpIdle.
appendix (2004-09-21 19:16:00) [2]< Поставь потоку, который обрабатывает COM приоритет tpHigher, а потоку, который отвечает за вывод времени - tpIdle. >
В каком месте это ставится? а процессор celeron 1700.
Defunct (2004-09-20 20:11:00) [3]> Пришлось отказаться от посекундного вывода времени.
Компьютер - 386SX16?
Поставь потоку, который обрабатывает COM приоритет tpHigher, а потоку, который отвечает за вывод времени - tpIdle.
appendix (2004-09-20 20:03:00) [4][3] У тебя же поток ничего делать не будет, только спать, а для этго есть таймеры.
А я пробовал таймеры. Но у меня есть ещё один поток в котором я работаю с com портом. И были проблемы с приёмом. Пришлось отказаться от посекундного вывода времени. Стал выводить поминутно. Но оказалось что запуск минутного таймера надо засинхронизировать. И пришлось лепить таймер синхронизатор.
Anatoly Podgoretsky (2004-09-19 14:00:00) [5]appendix © (19.09.04 12:29)
У тебя же поток ничего делать не будет, только спать, а для этго есть таймеры.
Defunct (2004-09-19 13:48:00) [6]и приоритет потока поставь tpIdle
VMcL (2004-09-19 12:56:00) [7]>> appendix © (19.09.04 12:29)
1. Application.OnIdle
2. TTimer
> Но приложение начинает страшно тормозить.
Поставь в цикле, который выполняется в кодовом потоке:
Sleep(1)или дажеSleep(250)