![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Приветствую, господа. Вновь нужна ваша помощь.
Пишу следующий код: Код:
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 служит для выгрузки потока, если ответ от устройства получен. При посылке команды основная форма виснет и не отвечает на действия. Без потока программа работает стабильно. Буду благодарен за любой совет. Программирую недавно, пояснения в коде будут особенно полезны. |