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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2013, 13:25   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
Злость Потоки и сеть

Добрый день.
Есть два потока для работы с сервером. В определённый момент требуется использовать сокет одного потока другим потоком, как правильно реализовать такую связь? Как их правильно объявить, чтобы обращаться к ним из любого потока?
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.12.2013, 14:07   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

"неправильно ты дядя Федор бутерброд ешь"
правильно архитектуру делать и геморрой рассосется
можно попросить из второго потока первый отправить/принять данные
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.12.2013, 14:10   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

А как например попросить?
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.12.2013, 14:22   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Полноты картины - что потоки делают?
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 12.12.2013, 14:34   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Два потока соединены с сервером, первый поток качает файл с сервера, второй просто крутится, когда первый поток докачал файл, второй поток отсылает сообщение серверу и общается с сервером, а первый просто крутится в пустую, до каких либо действий.
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.12.2013, 16:19   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это ты FTP делаешь? Не пойму зачем первому потоку нужно знать когда второй закончит? Когда он закончит, пусть разрывает соединение. Или просто первым элементом передает передаваемый размер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2013, 16:39   #7
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Не, это не фтп. Потоки, ни первый, ни второй не завершаются, они крутятся вечно и перестукиваются каждую минуту
Первый начинает качать файл и когда он его докачивает, второй должен начать загрузку другого файла, но работа обоих потоков обязательна именно так, тоесть, я не могу скачать первым потоком без наличии второго и также для второго.
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.12.2013, 17:38   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

использовать ОДИН поток с одним сокетом, в потоке предусмотреть переключатель качать то или иное.

Цитата:
Первый начинает качать файл
устанавливаем в РЕЖИМ1 и начинаем качать. (устанавливаем все нужные параметры)
Цитата:
когда он его докачивает, второй должен начать загрузку другого файла,
когда закончим устанавливаем РЕЖИМ2 и начинаем качать. (аналогично настраиваем нужные параметры)
когда закончим .....

Код:
while not terminated do 
  ReadFile1;
  ReadFile2;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.12.2013 в 17:49.
evg_m вне форума Ответить с цитированием
Старый 12.12.2013, 17:51   #9
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Это своего рода авторизация, в файлах служебные данные, система требует чтобы от одного компа было два коннекта с разными портами, если правило не соблюдается, то сервер рвёт соединение, такая вот логика, не мной придуманная
ДралсяСошибками вне форума Ответить с цитированием
Старый 12.12.2013, 23:02   #10
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Почему нельзя, например так:
Код:
var
  Form1: TForm1;
  WSocket1: TSocket;
  WSocket2: TSocket;
  SocketThread1: TSocketThread;
  SocketThread2: TSocketThread;
  ...
procedure TSocketThread1.Execute;
  Send(WSocket1, Buff, SizeOf(Buff), 0);
  Send(WSocket2, Buff, SizeOf(Buff), 0);
  ...
procedure TSocketThread2.Execute;
  Send(WSocket2, Buff, SizeOf(Buff), 0);
  Send(WSocket1, Buff, SizeOf(Buff), 0);
  ...
ДралсяСошибками вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки. Закрываются все потоки при ошибке в одном. Son Общие вопросы Delphi 11 01.11.2013 09:32
сеть и C# broker Общие вопросы .NET 4 01.11.2012 11:45
Сеть madmaniac Операционные системы общие вопросы 2 23.03.2011 19:43
Потоки, VCL и сеть palm Работа с сетью в Delphi 5 13.03.2011 04:55