Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.08.2011, 12:45
deadsoulf deadsoulf вне форума
Прохожий
 
Регистрация: 23.06.2011
Сообщения: 7
Репутация: 10
Вопрос Поток подвешивает основную форму

Приветствую, господа. Вновь нужна ваша помощь.
Пишу следующий код:
Код:
type
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  end;

//процедура ожидания и вывода ошибки ConnectionError////////////////////////////
procedure TNewThread.Execute;
var i: integer;
begin
  //CriticalSection.Enter; (раскомментирование этой строки и строки ниже не помогает)
  for i:=1 to 100 do
    if not CommBeenSent then NewThread.Destroy
    else Sleep(1);

  if CommBeenSent then begin
    Application.MessageBox('ERROR. No response has been received. Please check the connection to device.', 'Ошибка!', MB_OK);
    CommBeenSent := False;
    end;
  //CriticalSection.Leave;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CriticalSection:=TCriticalSection.Create;
......
end;

//Процедура посылки команды/////////////////////////////////////////////////////
procedure TForm1.Send(Sender: TObject);
begin
.......
  if CheckBox3.Checked then begin
    CommBeenSent := True;
    {создание потока ожидания и вывода ошибки ConnectionError}
    NewThread:=TNewThread.Create(true);
    NewThread.FreeOnTerminate:=true;
    NewThread.Priority:=tpLower;
    NewThread.Resume;
    end;

//обработка данных, принятых по СОМ ////////////////////////////////////////////
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
begin
.......
        CriticalSection.Enter;
        CommBeenSent := False;
        CriticalSection.Leave;
.......
end;

По сути: отправляю команды через COM-port на контроллер, на каждую получаю ответ. Если ответ не получен в течение определенного времени - выдать сообщение об ошибке подключения. Переменная CommBeenSent служит для выгрузки потока, если ответ от устройства получен.
При посылке команды основная форма виснет и не отвечает на действия. Без потока программа работает стабильно.
Буду благодарен за любой совет. Программирую недавно, пояснения в коде будут особенно полезны.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025