Предроложим что:
BusyFlag - глобальная переменная в рамках данного модуля
TCheckRequestThread - поток который обрабатывает запрос на внешнем устройстве, после обработки данных он самоуничтожается.
Код:
if ServerSocket.Socket.ActiveConnections = 1 then
begin
//тут читаем параметры запроса
if not BusyFlag then
begin
BusyFlag:=True;
TCheckRequestThread.Create; //запускаем поток (возможно, и даже скорее всего,
// в конструктор нужно быдет передать некоторые параметры)
// CheckRequest; // обрабатывает запрос (15-20 секунд);
end
else
begin
//тут отклоняем запросы пользователей
end;
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;
на событие
OnTerminate потока вешаешь обработчик который отправляет результаты обработки данных нужному пользователю и снимает
BusyFlag