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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2012, 20:14   #21
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Код:
  MyThread := TMyThread.Create(True); // Останавливаем поток
  MyThread.GoIdTCPClient := IdTCPClient1;
ВСЕ потоки работают с ОДНИМ и тем же клиентом?!

У каждого потока должен быть свой TCPclient
Смотри пример GunSmoker
Цитата:
Есть мнение, что делать надо так: создаёшь поток, поток создаёт TCPClient, выбирает данные, завершает работу.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 04.02.2012, 21:13   #22
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
ВСЕ потоки работают с ОДНИМ и тем же клиентом?!

У каждого потока должен быть свой TCPclient
Смотри пример GunSmoker
К TIdTCPClient1 ничего кроме потока не обращается. Этот TIdTCPClient1 должен работать пока живёт программа и динамическое создание не допускается.
Shouldercannon вне форума Ответить с цитированием
Старый 05.02.2012, 12:10   #23
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
По идее, после нажатия на кнопку BDisconnect произойдёт Disconnect
Код:
	if GoIdTCPClient.Connected then // проверили соединение Ok
//теперь (после нашей проверки) в другом потоке нажали Disconnect
	begin  
	  s := GoIdTCPClient.ReadLn; // а теперь пытаемся читать
// и что теперь будет ?
Цитата:
если даже уничтожить поток перед
Это не остановка а только предложение потоку закончить
Установка того самого флага
Цитата:
Код:
while not Terminated do
Код:
проверили флаг while
   установили флаг tread.terminate
проверили коннект if connect
   разорвали соединение cliect.disconnect
пробуем читать client.readln
Использование "чужих" (не локальных) объектов и ведет к таким ошибкам.
Поток должен имен локальный объект,сам устанавливать и разрывать соединение по своим правилам. Извне только параметры и указания на нужные действия (не сами действия).

Установка флага Terminated пример такого указания.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.02.2012 в 12:18.
evg_m на форуме Ответить с цитированием
Старый 05.02.2012, 22:17   #24
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

ТС строит неверную логику приложения изначально, поэтому возникают такие трудности с кодом.Вам сказали, что логика должна быть абстрагирована, а не размазана по приложению.
Цитата:
К TIdTCPClient1 ничего кроме потока не обращается. Этот TIdTCPClient1 должен работать пока живёт программа и динамическое создание не допускается.
Религия не позволяет создавать поток и идтсп в нем при старте программы и выполнять его пока программа работает? Вам столько решений указали, честно, не пойму, в чем еще возникают трудности.
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 05.02.2012 в 22:23.
3D Hunter вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правельно работать с событием в потоке через форму bulldog5293 Общие вопросы Delphi 13 16.08.2011 08:48
Таймер в потоке alexprey Общие вопросы Delphi 14 11.08.2010 23:14
Создать таймер в потоке? TwiX Общие вопросы Delphi 9 23.02.2010 21:39