Перейти к содержанию

Проблема с параллельными потоками !


Рекомендуемые сообщения

Доброго времени суток господа!

Имеется программа передачи данных по LPT порту для Win XP. Все работает, данные передаются, но проблема в том что когда клиент не отвечает программа переходит в режим ожидания клиента (в данном случае бесконечный цикл). Необходимо сделать так, чтобы программа останавливалась и выходила по кнопке "Выход". Если программа в бесконечном цикле, то на кнопку она не реагирует. Проект если что скину. Заранее благодарен !!!

procedure TForm1.Button2Click(Sender: TObject);

begin

memo2.clear;

ProgressBar1.position:=0;

Label6.Caption:=inttostr(0);

Label4.Caption:=inttostr(0);

{ for i:=1 to 100000 do

symv:='';}

AssignFile(f,paramStr(1));

reset(F);

i:=0;

flag:=true;

while not EOF(F) and flag=true do

begin

read(f,ch);

// Memo1.Text:=memo1.Text+c;

if ch<>#10 then

begin

if ((symv[i-3]<>'M') or (symv[i-2]<>'0') or (symv[i-1]<> '2')) then

begin

symv:=ch;

inc(i);

end

else

begin

flag:=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) do

begin

repeat

if not(d) then

Label2.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 then

Begin

{***************************** Отправка данных ********************************}

Закрыть

_________________

Ссылка на комментарий

for i:=0 to p-1 do//while not EOF(F) do

begin

repeat

if not(d) then

Label2.Font.Color:=clred;

Label2.Caption:= 'Ожидание готовности станка';

Application.ProcessMessages();

d:=pin10;

// delayUS(300);

Until (d);

Вот здесь у тебя зацикливается я так понимаю, попробуй усыплять прогу на секунду хотя бы

Ссылка на комментарий

for i:=0 to p-1 do//while not EOF(F) do

begin

repeat

if not(d) then

Label2.Font.Color:=clred;

Label2.Caption:= 'Ожидание готовности станка';

Application.ProcessMessages();

d:=pin10;

// delayUS(300);

Until (d);

Воyт здесь у тебя зацикливается я так понимаю, попробуй усыплять прогу на секунду хотя бы

не помогает

Добавлено спустя 1 минуту 36 секунд:

объект TTimer поможет

попробую

Ссылка на комментарий

Application.ProcessMessages цикл будет крутиться в несколько десятков раз медленнее. да но зато ты сможешь манипулировать с приложением, а без него будет казаться что прога повесилась

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...