Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 05:08   #1
katsoha
Новичок
Джуниор
 
Регистрация: 01.04.2013
Сообщений: 1
По умолчанию Проблема с параллельными потоками !

Доброго времени суток господа!
Имеется программа передачи данных по 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[i]:='';}

    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[i]:=ch;
          inc(i);
       end
        else

          begin
          flag:=false;{----------------------------------------------------------}
          symv[i]:=#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*100));
     if symv[i]<>#13 then

     Begin

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

Последний раз редактировалось Stilet; 01.04.2013 в 08:16.
katsoha вне форума Ответить с цитированием
Старый 01.04.2013, 08:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тебе нужно просто освоить класс TThread, для создания сопроцесса в программе. Из него вызывай получение данных. Тогда виснуть будет поток, а не основная программа.
Ищи по слову TThread и найдешь кучу примеров.
http://yandex.ua/yandsearch?text=TTh...oc=10&lr=20554
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с потоками Bax77 Общие вопросы Delphi 3 29.01.2013 16:11
Проблема с потоками vlad.md Мультимедиа в Delphi 0 07.03.2012 22:55
Проблема с потоками xStill Работа с сетью в Delphi 0 19.03.2010 10:17
Проблема с потоками DeeNamid Общие вопросы Delphi 2 04.08.2008 17:36
Проблема с потоками vitalik007 Общие вопросы Delphi 1 11.03.2008 22:35