![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
забавная штука. вот есть у меня в одном классе внутрений thread.
если его не трогать а просто создать и перевести в спячку то он дестроится быстро. а если его запустить и там он что то покрутит какой то процесс, то потом снова перевести в спячку, топосле этого он дестроится неприлично долго. среда дельфи6. итак есть класс, в его креатере код: fPollThread:=TPollThread.Create(True);// т.е. Suspend:=True - стоим ничего не делаем fPollThread.FreeOnTerminate:=False; fPollThread.Delay:=100; fPollThread.OnPoll:=OnPoll; далее где то в программе OnPoll активизируется (или не активизируется) этот поток, т.е. в нем начинает крутится процедура OnPoll потом где то там в программе поток деактивируется в Suspend. в конце работы программы все уничтожается. (все потоки заведомо переведены в Suspend!) код деструктора класса fPollThread.OnPoll:=nil; fPollThread.Terminate; FreeAndnil(fPollThread);//здесь существенная задержка если однажды поток был Resumed выяснил что в момент FreeAndnil(fPollThread) еще раз отрабатывается OnExecute. в Execute вызывается OnPoll но т.к. он уже =nil то ничего полезного не делается. странно... хотя поток в Suspend. Это сообщение отредактировал(а) pethead - 1.6.2009, 18:54 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Ничего странного. Нужно только посмотреть исходники.
|
|||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
а какой в этом смысл?
щас у меня написано так что создается всегда но не запускается. запускается по нужде потом. но зато и лишний раз резюмится при уничтожении. похоже мне надо так написать код чтобы при нужде что то выполнить в потоке поток бы создавался сразу и запускался (CreateSuspend:=False) а при прекращении нужды поток убивать. Это сообщение отредактировал(а) pethead - 1.6.2009, 20:31 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
Это знаете вы. Но этого не знает компилятор. Причина проста: не буду говорить за всех, но весь код инициализации (особенно - потокозависимых полей) я размещаю в Execute потока. И финализации тоже. Поток же может быть заснут в любом состоянии. И если терминировать его не разбудив - кто высвободит занятые в инициализации ресурсы? |
|||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
||||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
deleted
Это сообщение отредактировал(а) pethead - 8.6.2009, 08:36 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |