Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TThread & Terminate 
V
    Опции темы
ButtonOFF
Дата 27.11.2012, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


улетевший
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Скажите пожалуйста, такая ситуация, поток ждет до бесконечности в WSAWaitForMultipleObjects, пытаясь его закрыть TThread.Terminate и потом дождаться закрытия TThread.WaitFor я остаюсь висеть вместе с ним. В Си шарпе для таких ситуаций есть даже 2е функции. Думал в делфи есть что-то подобное, но перерыв не мало доков ничего не нашел. Как в такой ситуации быть?

Код

func 1();
var
t: TThread;
begin
....

t := TThread.Create(true);
...
t.resume;
end;

proc TThread.Execute;
begin
while not Terminate do
...
WaitForMultypleObjects(WSA_INFINITY) - здесь он стоит дожидаясь событий на сокетах
...
end;

proc AppClose;
begin
t.Terminate;
t.WaitFor; - здесь затык, т.к поток в ожидании
t.Free;
end;


Есть вариант сделать вместо WSA_INFINITY что-то типа 1000, но все таки может есть другой вариант?


Это сообщение отредактировал(а) ButtonOFF - 27.11.2012, 18:07
PM MAIL   Вверх
Illusion Dolphin
Дата 27.11.2012, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

есть даже 2е функции

Что за они?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Чучмек
Дата 27.11.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Если уж совсем никак то TerminateThread.



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
bems
Дата 28.11.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



если вызывается с fWaitAll = False то можно добавить в массив передаваемый в WSAWaitForMultipleEvents событие, которое сигналить при необходимости завершить тред


--------------------
Обижено школьников: 8
PM MAIL   Вверх
MetalFan
Дата 29.11.2012, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(ButtonOFF @  27.11.2012,  18:06 Найти цитируемый пост)
Есть вариант сделать вместо WSA_INFINITY что-то типа 1000

Вполне себе нормальный вариант, имхо.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
ButtonOFF
Дата 29.11.2012, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


улетевший
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 16.11.2009

Репутация: нет
Всего: нет



Illusion Dolphin, 
Цитата

Что за они?

Thread.Interrupt и Thread.Abort

bems, 
Цитата

можно добавить в массив передаваемый в WSAWaitForMultipleEvents событие

думал об этом, и решил в сторону таймаута в 1 сек и проще и в массив ивентов будет на 1 побольше) все таки ограничение в 64 не оч много.

Чучмек, 
тред должен выполнить очистку перед уничтожением (закрыть сокеты и тд), так бы вообще не заморачивался  smile 


В общем всем спасибо за советы, проблема в принципе надуманная   smile 
PM MAIL   Вверх
MetalFan
Дата 29.11.2012, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



В догонку: совсем не обязательно перед TThread.Free вызывать WaitFor.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.