![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
Valery |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Кто просвятит новичка и дохотчиво прочтет лекцию ?
Вопрос в следующем на примере:
В потоке "IdTCPServer1Execute" принимаются и обрабатываются сообщения от нескольких клиентов. Для обработки сообщений в потоке вызывается внешняя программа "XXX". Если в потоке "IdTCPServer1Execute" еще незавершена внешняя программа "XXX", а в это время в этом потоке пришло сообщение от другого Клиента, то еще раз будет вызвана незавершенная таже самая программа "XXX" ??? Если это так, то как избежать одновременного многоразового вызова вложенной в поток программы ? Это сообщение отредактировал(а) Girder - 30.3.2007, 16:02 |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 5 Всего: 158 |
IdTCPServer1Execute - это не поток, а процедура, выполняющаяся в потоке. для каждого подключившегося клиента создается свой поток, т.е., упрощенно, каждого клиента обслуживает отдельная "копия" IdTCPServer1Execute. вызов из процедуры приема сообщений внешней программы - это, простите, моветон. ![]() будет ли создаваться при этом новый процесс - зависит от вызываемой программы(подозреваю, что будет). если делать блокировку запуска "копий", то это будет неоправданно задерживать клиентов. вобщем, настоятельно рекомендую пересмотреть все. от начала и до конца. если не хватает знаний, то попытаться привлечь более опытных товарищей. |
|||
|
||||
Valery |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 31.7.2006 Репутация: нет Всего: нет |
Спасибо за ответ.
У меня задача в следующем состоит. Необходимо реализовать сеть, состоящуую из главного диспетчерного компьютера и из 50 сетевых компьютеров. При этом главный диспетчерный компьютер и все остальные должны иметь право быть и серверами и клиентами. А именно главный комп всем остальным компам и все остальные в сторону главного компа должны иметь возможность посылать и сообщения и файлы. При этом каждым компом принимаемое сообщение или файл должны обрабатываться, то есть вызываться внешние программы. Базируясь на вашем опыте прошу совета и примера алгоритма для решения такой задачи. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 5 Всего: 158 |
спасибо за оказанное доверие, конечно
![]() как я уже говорил, вызов внешней программы на каждое сообщение - не есть гут, и, по-хорошему, надо либо перетаскивать функционал этой программы в твое приложение, либо изменять эту внешнюю программу, чтобы она постоянно работала, а сообщения получала посредством ipc(inter-process communication). если же по-плохому, в лоб, то: кидаем на форму пару серверов, пару клиентов: одна пара - для сообщений, другая - для файлов. делаем функцию запуска внешней программы примерно такую:
csexec - переменная типа TCriticalSection либо глобальная, либо в классе формы, например. не забудь сделать InitializeCriticalSection где-нибудь в конструкторе и DeleteCriticalSection в деструкторе формы... ps. если есть доступ к исходникам "внешних программ" или точно известно, что они делают, то настоятельно рекомендую сделать "по-хорошему". ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |