Показать сообщение отдельно
  #1  
Старый 21.10.2013, 11:10
Smallboy Smallboy вне форума
Прохожий
 
Регистрация: 16.07.2013
Сообщения: 18
Версия Delphi: Delphi XE4
Репутация: 10
По умолчанию Реализация параллельной работы

Доброе утро!
У меня возник вопрос. Пару месяцев назад начал работать с делфи.
Подскажите как реализовать следующую задачу.

Вот как сейчас работает моя программа:
- слушает определенный порт
- если на этот порт приходит запрос от клиента, то обрабатывает этот запрос
- если в момент обработки запроса от клиента приходит еще один запрос, то его необходимо отклонить

Запрос представляет из себя строку с параметрами. Получив эти параметры программа вызывает функцию из 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;
Ответить с цитированием