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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 18:20   #1
Anatoliy24
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 10
Вопрос idTCPServer

Помогите пожалуйста разобраться в одном вопросе.
Известно что для каждого соединения клиента сервер создает отдельный поток. Как понимать это высказывание?

Вопрос собственно в чем:
1) Сервер обрабатывает некое входящее сообщение от одного клиента;
2) Посылает его дальше на обработку в созданную мною функцию.
3) Функция выполняется и передает клиенту ответ.

Вопрос собственно в том будут ли моя функция обрабатываться для каждого клиента в отдельном потоке?
Или же в отдельном потоке будет только Execute и отправка?

Оч надеюсь на помощь. Заранее спасибо.
Anatoliy24 вне форума Ответить с цитированием
Старый 11.02.2011, 18:25   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

никто лучше GetCurrentThreadID() этого не знает
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.02.2011, 18:36   #3
Anatoliy24
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
никто лучше GetCurrentThreadID() этого не знает
Ви с данным вопросом не сталкивались? Может я непонятно объяснил суть вопроса... Попробую по другому:
клиент высылает имя файла, сервер обрабатывает его в Execute и отправляет в процедуру (мною созданную) отправки файла с заданным именем. Так вот, если два клиента попытаются запросить у сервера два разных файла, то как будет выполнятся отправка фалов? Параллельно? или же один будет получать а другой стоять в очереди и ждать?
Anatoliy24 вне форума Ответить с цитированием
Старый 11.02.2011, 20:50   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
или же один будет получать а другой стоять в очереди и ждать?
Очереди не будет. Будет создаваться отдельный поток, которому назначится твоя процедура, и если она не работает с глобальными переменными в проекте считай что мешать друг другу отдельные потоки не будут. Несмотря на то что процедура одна и та же у каждого потока будет свое информационное поле.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2011, 21:21   #5
Anatoliy24
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Очереди не будет. Будет создаваться отдельный поток, которому назначится твоя процедура, и если она не работает с глобальными переменными в проекте считай что мешать друг другу отдельные потоки не будут. Несмотря на то что процедура одна и та же у каждого потока будет свое информационное поле.
То есть, если я вас правильно понял, то компонента idTCPServer сама создаст мою процедуру (ну или любые обработки запросов клиента) в отдельном потоке? И моего вмешательства, типа помещать процедуру в Thread не нужно?
Anatoliy24 вне форума Ответить с цитированием
Старый 11.02.2011, 21:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
сама создаст мою процедуру (ну или любые обработки запросов клиента) в отдельном потоке?
Не создаст а задействует ) Скажем так она вызовет процедуру с параметрами однозначными для каждого потока, если в процедуре нет работы с глобальными объектами.
Цитата:
И моего вмешательства, типа помещать процедуру в Thread не нужно?
Если ты ее вызываешь из Thread то нет. Другое дело что если она будет вызвана из потоков, но работать с одной и той же переменной (ными) в разных потоках то придется делать синхронизацию, потому я лично предпочитаю такие процедуры всетки "вставлять" в Thread, дабы однозначно определить их пространство деяний. Так надежнее, и стараюсь не работать в таких процедурах с глобальными переменными проекта.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2011, 23:27   #7
Anatoliy24
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не создаст а задействует ) Скажем так она вызовет процедуру с параметрами однозначными для каждого потока, если в процедуре нет работы с глобальными объектами.

Если ты ее вызываешь из Thread то нет. Другое дело что если она будет вызвана из потоков, но работать с одной и той же переменной (ными) в разных потоках то придется делать синхронизацию, потому я лично предпочитаю такие процедуры всетки "вставлять" в Thread, дабы однозначно определить их пространство деяний. Так надежнее, и стараюсь не работать в таких процедурах с глобальными переменными проекта.
Ну если я сам инициирую Thread то понятно что больше моего вмешательства в потоки не требуется. Глобальными переменными я пользоваться не собираюсь. Ответьте пожалуйста однозначто, сможет ли компонент idTCPServer реализовать мои процедуры многопоточно (т.е. для каждого клиента обработка его запроса реализуется в отдельном потоке, будь то одна процедура или же набор проседур и функций для достижения определенного результата)?
Anatoliy24 вне форума Ответить с цитированием
Старый 12.02.2011, 11:40   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ответьте пожалуйста однозначто
Невозможно. Ответь пожалуйста однозначно были ли Американцы на луне.
Как тебе можно что-то говорить совершенно не зная механайза твоего проекта?
Никак я не могу тебе гарантировать что твоя многопоточность боком не выйдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свойства idTCPServer Deman005 Работа с сетью в Delphi 8 04.05.2010 14:57
IdTCPServer Pankhammer Работа с сетью в Delphi 0 30.04.2010 00:14
IDTCPServer IP адрес SERG1980 Работа с сетью в Delphi 1 28.05.2009 16:43
IdTCPServer Exception Comer_Jus Работа с сетью в Delphi 2 25.06.2008 22:23
IdTcpClient и idTcpServer xTANATOSx Работа с сетью в Delphi 9 17.05.2008 23:11