Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

работа с IndyUDPServer в потоке Thread   Найти похожие ветки 

 
XfroSt   (2006-12-21 16:31) [0]

Ситуация такая... я работаю с IndyUDPServer в потоке...
метод execute описан так

procedure TGameThread.Execute;
begin
 inherited;
 UdpS := TidUDPServer.Create(nil);
 ScanGame;
 Sleep(2000); // ожидаем 2 секунды (сделать настройку) для ответа UDP
 UdpS.Destroy; // уничтожаем сервер
 TGameThread(ThreadList[ThreadList.Count - 1]).Terminate; // убираем один поток из списка
 ThreadList.Delete(ThreadList.Count - 1);
end;

процедура ScanGame выглядит так

begin
             // Если UDp
               UdpS.Active := false;
               Udps.OnUDPRead := UdpsUDPRead;
               UdpS.DefaultPort :=Cport ;
               UdpS.BroadcastEnabled := true;
               Udps.ThreadedEvent := true;
               UdpS.Active := true;
               UdpS.Broadcast(pak,Sport);
               

             end;

при это как видно поток живет 2 секунды, сервер переходит в ожидание и отсылает запрос. Если приходит ответ в течении 2 секунд, то он обрабатывается если нет , то сервер и поток уничтожаются.

Данный поток из основной программы я вызываю вот так
ThreadList.Add(TGameThread.Create(false));

Проблема при вызове двух потоков одновременно (они отсылают разные запросы), когда второй поток делает вот это
UdpS.Broadcast(pak,Sport)
, а прервый еще не уничтожился, возникает ошибка Counot bind the socket.

Вопрос!
Как можно организовать работу нескольких потоков IndyUDPServer что бы не возникало такой ошибки ? как я понял просто второй занимает тот же сокет, как ему дать другой. Что бы можно было многопоточно отсылать сообщения и ждать их ответов ?


 
Сергей М. ©   (2006-12-21 16:35) [1]


> как ему дать другой


UDPServer.Binding.Port := даю_другой

А вообще - каша какая-то из обрывочных сведений о многом понемногу.


 
XfroSt   (2006-12-21 16:52) [2]


> UDPServer.Binding.Port := даю_другойА вообще - каша какая-
> то из обрывочных сведений о многом понемногу.

а это назначается порт отправки или порт приема ?

какие сведения еще сообщить ? вроде я описал все пошагово...


 
Сергей М. ©   (2006-12-22 08:20) [3]


> а это назначается порт отправки или порт приема ?


Порт приема.


> поток живет 2 секунды, сервер переходит в ожидание и отсылает
> запрос


Судя по твоему коду дело обстоит так

1. Сервер активируется.
2. Выполняет бродкаст на указанный параметром порт.
3. Поток спит 2 секунды богатырским сном, ничего не делая и ни на что не реагируя при этом.
4. Поток просыпается, уничтожает сервер и тут же завершает свое выполнение.


 
Сергей М. ©   (2006-12-22 08:43) [4]

И зачем тебе куча доп.потоков - это тоже не понятно.

Достаточно одного. Да и он не нужен - при ThreadedEvent = true всё это с успехом делается в осн.потоке.


 
XfroSt   (2006-12-22 20:47) [5]

Сергей М Спасибо!
Я решил по другому... -- UdpS.Binding -- все работает ....



Страницы: 1 вся ветка

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
15-1183009073
Andy BitOff
2007-06-28 09:37
2007.07.29
Пятое измерение можно наблюдать в областях сверхгравитации


11-1166415709
SecurAdmin
2006-12-18 07:21
2007.07.29
KOL+ перетаскивание формы за любую ее точку


15-1183312891
IPE
2007-07-01 22:01
2007.07.29
Apache 2


11-1166449550
TAHKEP
2006-12-18 16:45
2007.07.29
Можно как-то "впихнуть" ProgressBar ы в StatusBar ?


15-1181879944
Курдль
2007-06-15 07:59
2007.07.29
Происхождение выпускников Бауманки