katsoha Опубликовано 1 апреля, 2013 Жалоба Поделиться Опубликовано 1 апреля, 2013 Доброго времени суток господа!Имеется программа передачи данных по LPT порту для Win XP. Все работает, данные передаются, но проблема в том что когда клиент не отвечает программа переходит в режим ожидания клиента (в данном случае бесконечный цикл). Необходимо сделать так, чтобы программа останавливалась и выходила по кнопке "Выход". Если программа в бесконечном цикле, то на кнопку она не реагирует. Проект если что скину. Заранее благодарен !!!procedure TForm1.Button2Click(Sender: TObject);beginmemo2.clear;ProgressBar1.position:=0;Label6.Caption:=inttostr(0);Label4.Caption:=inttostr(0);{ for i:=1 to 100000 dosymv:='';}AssignFile(f,paramStr(1));reset(F);i:=0;flag:=true;while not EOF(F) and flag=true dobeginread(f,ch);// Memo1.Text:=memo1.Text+c;if ch<>#10 thenbeginif ((symv[i-3]<>'M') or (symv[i-2]<>'0') or (symv[i-1]<> '2')) thenbeginsymv:=ch;inc(i);endelsebeginflag:=false;{----------------------------------------------------------}symv:=#13;inc(i);end;end;end;p:=i;ProgressBar1.max:=p;Label6.Caption:=inttostr(round(i/1000));for i:=0 to p-1 do//while not EOF(F) dobeginrepeatif not(d) thenLabel2.Font.Color:=clred;Label2.Caption:= 'Ожидание готовности станка';Application.ProcessMessages();d:=pin10;// delayUS(300);Until (d);ProgressBar1.position:=i;Label4.caption:=inttostr(round(i/p ));if symv<>#13 thenBegin{***************************** Отправка данных ********************************}Закрыть_________________ Ссылка на комментарий
promises Опубликовано 1 апреля, 2013 Жалоба Поделиться Опубликовано 1 апреля, 2013 for i:=0 to p-1 do//while not EOF(F) dobeginrepeatif not(d) thenLabel2.Font.Color:=clred;Label2.Caption:= 'Ожидание готовности станка';Application.ProcessMessages();d:=pin10;// delayUS(300);Until (d); Вот здесь у тебя зацикливается я так понимаю, попробуй усыплять прогу на секунду хотя бы Ссылка на комментарий
_delphin_ Опубликовано 1 апреля, 2013 Жалоба Поделиться Опубликовано 1 апреля, 2013 объект TTimer поможет Ссылка на комментарий
katsoha Опубликовано 4 апреля, 2013 Автор Жалоба Поделиться Опубликовано 4 апреля, 2013 for i:=0 to p-1 do//while not EOF(F) dobeginrepeatif not(d) thenLabel2.Font.Color:=clred;Label2.Caption:= 'Ожидание готовности станка';Application.ProcessMessages();d:=pin10;// delayUS(300);Until (d); Воyт здесь у тебя зацикливается я так понимаю, попробуй усыплять прогу на секунду хотя быне помогаетДобавлено спустя 1 минуту 36 секунд:объект TTimer поможетпопробую Ссылка на комментарий
Solbon13 Опубликовано 9 апреля, 2013 Жалоба Поделиться Опубликовано 9 апреля, 2013 Application.ProcessMessages цикл будет крутиться в несколько десятков раз медленнее. да но зато ты сможешь манипулировать с приложением, а без него будет казаться что прога повесилась Ссылка на комментарий
katsoha Опубликовано 9 апреля, 2013 Автор Жалоба Поделиться Опубликовано 9 апреля, 2013 Application.ProcessMessages не помогает Ссылка на комментарий
fix511 Опубликовано 13 апреля, 2013 Жалоба Поделиться Опубликовано 13 апреля, 2013 Используйте потоки (базовый класс TThread). Ссылка на комментарий
ros.pro Опубликовано 13 апреля, 2013 Жалоба Поделиться Опубликовано 13 апреля, 2013 делайте опрос в отдельном потоке Ссылка на комментарий
Petrovichtim Опубликовано 14 апреля, 2013 Жалоба Поделиться Опубликовано 14 апреля, 2013 делайте опрос в отдельном потоке+1 Цикл вешай в дочернем потоке, а прерывай его в главном Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти