![]() |
|
|
![]()
|
|
| Бегемот |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
Здравствуйте!
Есть поток, который запускается нажатием кнопки. В потоке производится отсчет времени. Индикация производится через Synchronize. Все работает, но только один раз. Почему поток не запускается повторно?
|
||||
|
|||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
Дык ты поток уничтожил строкой FreeOnTerminate = true;
Его поэтому нужно заного создавать. НА почитай чтобы понимал что делаешь http://rxlib.ru/WinLesson/bles2_1.htm Это сообщение отредактировал(а) Dem_max - 26.2.2013, 03:43 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Бегемот |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
Dem_max, убрал строку...
В FormCreate дописал...
Это проблему не решило. Поток запускается один раз |
||||
|
|||||
| Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
ДА еще Timer *TimerThr1 = new Timer(true); перенеси в
Нахрена ???? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
Перенос ничего не дал.
Дописал, что бы память не освобождалась после завершения потока. Хотя хоть пиши, хоть не пиши, поток выполняется все равно один раз! |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 14 Всего: 39 |
ну где итоговый код ???
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Бегемот |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
|
||||
|
|||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Суть в том, что после того как поток отработал, его уже нельзя использовать повторно. Нужно сначала удалить его (не важно как: через delete или через FreeOnTerminate = true), а потом создать заного. Т.е. как-то так:
Единственное, в этом случае, каждый раз при нажатии на кнопку будет создавться новый поток. Если вас это не устраивает, то нужно предусмотреть механизм, который будет следить за тем, был ли уже создан поток или нет. Это сообщение отредактировал(а) artsb - 26.2.2013, 07:54 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| Бегемот |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 26.1.2005 Где: На границе Европы и Азии Репутация: 1 Всего: 3 |
artsb, спасибо! Вы мне помогли! Поток у меня "самодостаточен" и для меня не критично, что всякий раз это новый поток, главное, что бы исполнялся его код.
Но! Возникает вопрос: как может быть полезна FreeOnTerminate = false? Если я правильно понял, в данном случае поток не завершается, но и не выполняется вновь. И еще... delete TimerThr1 и FreeOnTerminate = true - равнозначны? |
|||
|
||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
По умолчанию, FreeOnTerminate = false. Это просто означает, что после завершения выполнения функции Execute, поток не будет сам себя уничтожать. Иначе - будет.
По сути, да. delete - это вы сами удаляете объект потока в какой-то момент. FreeOnTerminate = true - означает, что после завершения Execute() поток сам себя уничтожит. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |