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 Цикл вешай в дочернем потоке, а прерывай его в главном Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.