| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Завершение потока и TThreadList |
| Автор: _Rin 25.6.2007, 09:23 | ||
| Пишу TCP сервер и клиент(на Indy). На сервере создаю поток для обработки сообщений от клиента. Поток работает с ThreadList-ом (делает LockList и UnlockList). Как правильно уничтожить поток, чтобы быть уверенным, что поток сделает ThreadList.UnlockList, до того как сам "умрет". Execute потока (CommandList: TThreadList)
|
| Автор: _Rin 25.6.2007, 12:59 |
| хм...а подробнее....что не так? Добавлено через 1 минуту и 38 секунд Проблема в том, что CommandList после "уничтожения" потока не разлочивается.... Добавлено через 6 минут и 6 секунд Потоку выставляется terminated, FreeOnTerimate стоит в true, этот поток завершается, но из основного потока программы не получается обратиться к CommandList. |
| Автор: MetalFan 25.6.2007, 22:28 | ||
а что если Remove(Command) заменить на Delete(0) ? |
| Автор: _Rin 28.6.2007, 12:39 |
| Возник такой вопрос.... Есть 2 потока, работают с одним ThreadList-ом. 1) Первый поток сделал LockList и начал работать с элементами списка 2) Одновременно с этим второй поток делает ThreadList.Add (без LockList) 3) Что произойдет со списком в первом потоке (он увидит новый добавленный элемент, или нет)...??? Аналогично, что будет, если второй поток сделает ThreadList.Remove (без LockList) ??? |
| Автор: MetalFan 28.6.2007, 12:58 |
| _Rin, посмотри в classes реализацию этих методов и все сам поймешь. hint: методы procedure Add(Item: Pointer); procedure Clear; procedure Remove(Item: Pointer); внутри себя вызывают Lock/Unlock List |
| Автор: _Rin 29.6.2007, 08:54 |
| Спасибо...теперь вроде разобралась |