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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2013, 17:43   #1
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
Стрелка TTimer в отдельный поток

Привет всем. Возник следующий вопрос(скорее требующий уточнения). На форму "бросил" два таймера (TTimer). Один выполняет основную часть программы(выждав 5000мс), а другой инкрементирует число i каждые 1000мс и выводит его на экран(что-то вроде счетчика).
Когда запускается основная часть таймер перестает выводить i на время ее выполнения(продолжая "инкать").

Насколько я понял, оба таймера работают в главном потоке, а i++ работает только потому, что TTimer не полностью "самостоятелен". Так ли это? Можно ли как-то перенести один из таймеров в отдельный поток? Если да, то как?
GoriZonTT вне форума Ответить с цитированием
Старый 15.07.2013, 20:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты второй таймер попробуй замени на доппоток со sleep(1000).
Цитата:
оба таймера работают в главном потоке, а i++ работает только потому, что TTimer не полностью "самостоятелен".
В принципе соглашусь. Таймеры то работают в одном потоке - потоке главной формы?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2013, 02:27   #3
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты второй таймер попробуй замени на доппоток со sleep(1000).
Думаю, это самый лучший вариант. Спасибо.

Цитата:
Сообщение от Stilet Посмотреть сообщение
В принципе соглашусь. Таймеры то работают в одном потоке - потоке главной формы?
Да, именно так. Просто до этого считал, что таймеры заработают синхронно
GoriZonTT вне форума Ответить с цитированием
Старый 16.07.2013, 07:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
до этого считал, что таймеры заработают синхронно
Ну я думаю это некий cover синхронности, а не сама синхронизация
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2013, 12:54   #5
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

И все-таки это не то, что надо. Я не придал важности упомянуть, что каждый "тик" ( Sleep(1000) ) мое значение записывается в Label1. И тут я опять натыкаюсь на те же грабли (зависает при срабатывании события OnTimer )
GoriZonTT вне форума Ответить с цитированием
Старый 16.07.2013, 14:02   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно ли как-то перенести один из таймеров в отдельный поток?
В доп. поток надо переносить не "быстрый" таймер, а медленную(долгую) основную часть.
Цитата:
Когда запускается основная часть таймер перестает выводить
иначе вы так и будете ждать пока она отработает. Обновление информации на экране по мнению Windows наименее приоритетная часть задачи (надо выполнять задачу, а не заниматься пустым рисованием).
Цитата:
И тут я опять натыкаюсь на те же грабли (зависает при срабатывании события OnTimer )
P.S. иногда работают с костылем Application.ProcessMessage; внутри цикла основной обработки. Как? поиск по форуму.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 16.07.2013, 14:58   #7
GoriZonTT
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
В доп. поток надо переносить не "быстрый" таймер, а медленную(долгую) основную часть.

Иначе вы так и будете ждать пока она отработает. Обновление информации на экране по мнению Windows наименее приоритетная часть задачи (надо выполнять задачу, а не заниматься пустым рисованием).

P.S. иногда работают с костылем Application.ProcessMessage; внутри цикла основной обработки. Как? поиск по форуму.
Логику понял. Воспользовался ProcessMessage(). Вроде "жужжит". Для себя же сделал вывод, что лучше продумывать такие вещи заранее... Это благо, что скорость выполнения мне сейчас не столь важна
GoriZonTT вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вынесение функции в отдельный поток The SCS Общие вопросы Delphi 2 11.02.2012 01:27
Вынести GUI в отдельный поток Silly Student C++ Builder 1 22.11.2011 15:15
ОтДельный поток StartMis Общие вопросы Delphi 10 22.02.2010 08:20
Отсылка почты через отдельный поток Hottabych Работа с сетью в Delphi 16 15.03.2008 11:31
Отсылка почты через отдельный поток Hottabych Работа с сетью в Delphi 0 11.03.2008 19:32