![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброе утро!
У меня возник вопрос. Пару месяцев назад начал работать с делфи. Подскажите как реализовать следующую задачу. Вот как сейчас работает моя программа: - слушает определенный порт - если на этот порт приходит запрос от клиента, то обрабатывает этот запрос - если в момент обработки запроса от клиента приходит еще один запрос, то его необходимо отклонить Запрос представляет из себя строку с параметрами. Получив эти параметры программа вызывает функцию из Dll, которая отправляет эти параметры на устройство через COM- порт. Устройство обрабатывает данные и возвращает ответ. Суть проблемы. Обработка данных устройством занимает 15-20 секунд, и в это время все запросы приходящие на порт, который слушается -- становятся в очередь и не обрабатываются пока не отработает функция. Это не допустимо. Необходимо, чтобы в случае занятости -- клиент сразу получал ответ. Как наладить параллельную работу прослушки порта и остальной работы программы? Вот участок кода, который обрабатывает запросы: Код:
if ServerSocket.Socket.ActiveConnections = 1 then begin //тут читаем параметры запроса CheckRequest; // обрабатывает запрос (15-20 секунд); GetParam:=''; exit; end else begin ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections-1].SendText('Сервер не доступен'); Application.ProcessMessages; Buffer.Lines.Insert(0,'Отключаем лишний коннект'); Application.ProcessMessages; ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnections-1].Close; Application.ProcessMessages; ConNum; end; |