![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |