Показать сообщение отдельно
  #4  
Старый 21.10.2013, 12:29
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Предроложим что:
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
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием