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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2009, 15:36   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию выход из цикла

Здравствуйте.
Подскажите, как реализовать выход из цикла?
Прога принимает байты по ethernet и отображает в стринггрид. Использую tcpclient1.recivebuf();
и tcpclient.waitfordata которое равно 10мс.
Делаю так:
Код:
var
b:boolean;

procedure .........(Sender: TObject);
var
........
begin
b:=false;
............
if b then break;
............
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
b:=true;
end;
но это все работает когда tcpclient.waitfordata=100мс, и то Button2
срабатывает через раз.
а когда tcpclient.waitfordata=10мс (что мне и нужно), Button2 сработает если постоянно по ней долбить и то не факт.
как быть?
varelik вне форума Ответить с цитированием
Старый 24.12.2009, 15:40   #2
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

Ты что долбишь по кнопке, принимая данные? А сделать циклом не вариант?
TzX вне форума Ответить с цитированием
Старый 24.12.2009, 15:48   #3
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

да нет же!)
Данных приходит и отображается очинь много и иногда (ну мне так нужно)
я хочу остановить процесс отображения и выйти из цикла с помощью нажатия Button2
varelik вне форума Ответить с цитированием
Старый 24.12.2009, 15:52   #4
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

А.... А конструкция
Код:
Repeat
   тут получаешь данные(или отображаешь что там...)
Until stop=true;
Для твоих целей не подойдет?
TzX вне форума Ответить с цитированием
Старый 24.12.2009, 15:56   #5
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

да пробовал- та же хрень
varelik вне форума Ответить с цитированием
Старый 24.12.2009, 15:59   #6
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

А с предусловием пробывал? Может не так строишь логику цикла... дай кусочек кода если можешь по конкретнее
TzX вне форума Ответить с цитированием
Старый 24.12.2009, 16:13   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Application.ProcessMessage
и глобальная булева переменная.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.12.2009, 16:19   #8
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

TzX,код по памяти:
Код:
.....
nn:=0;
repeat
......
pdata[0]:=..; //pdata- массив для передачи байт
...
pdata[17]:=..;
....
tcpclient.sendbuf(pdata,17);//передаем байты внеш-му устройству
if b=true then breack;
while tcpclient.waitfordata(10) do begin
tcpclient.recivebuf(a,164);//прием ответа
end;
........
if nn<>1 then begin
stringgrid1.cells[0,stringgrid1.rowcount-1]:= сюды отображаем
....
stringgrid1.cells[50,stringgrid1.rowcount-1]:=...
.....
end;
until nn=1;
....
Пепел Феникса, переменная b как раз глобальная,
а вот Application.ProcessMessage где написать? (я его гдето в процедуре использовал, но так.. бездумно)

Последний раз редактировалось varelik; 24.12.2009 в 16:29.
varelik вне форума Ответить с цитированием
Старый 24.12.2009, 16:32   #9
TzX
Пользователь
 
Аватар для TzX
 
Регистрация: 23.12.2009
Сообщений: 57
По умолчанию

Код:
while tcpclient.waitfordata(10) do 
begin
tcpclient.recivebuf(a,164);//прием ответа
if b=true then break;
Application.ProcessMessage;
end;
попробуй так
TzX вне форума Ответить с цитированием
Старый 24.12.2009, 16:43   #10
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

пробовал- ноу эффекто((
мож как по другому цикл прервать? без глобальной булевой.. даже не знаю..
могу конечно в onclose формы ХАЛЬТ поставить- но согласись- бред

Последний раз редактировалось varelik; 24.12.2009 в 16:53.
varelik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из бесконечного цикла TilerDerton Общие вопросы Delphi 9 10.09.2010 08:48
Выход из цикла нажатием ESC Banderas123 Помощь студентам 2 05.12.2009 22:44
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Выход из цикла RIO Помощь студентам 1 21.04.2008 22:55
Оператор цикла с предусловием While. Оператор цикла с пост условием Repeat McMilin Помощь студентам 7 11.11.2007 14:10