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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 23:18   #1
extrimportal
Пользователь
 
Аватар для extrimportal
 
Регистрация: 07.04.2009
Сообщений: 26
Вопрос Остановление работы программы.

Когда я запускаю программу она долго выполняет свою работу так как работает с интернетом, как пользователь может её остановить, например надо в какое то время перейти на другую форму а выполнение на этой остановить. Или как в какое то время нажать на кнопку и она остановит работу проги?
extrimportal вне форума Ответить с цитированием
Старый 21.04.2009, 23:26   #2
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

исходник... и желательно краткое описание.. самой проги

тоесть как:
1. Если там какой то цикл (если долго работает) то можно перед самим запуском поставить проверку на булеву переменную, и ее же изменять когда можно работать, а когда нет.
Примечание: не прерывай работу тела цикла, это может плохо кончится.

2. Если там одна цельная процедура такая долгая, то можно в саму процедуру натыкать проверок на туже переменную, и если надо прерывать, то прерываем.

Пример:
Код:
     for (true) do
     begin
      if CanWork = true then
      begin
       // операторы
      end else begin
        exit;
        end;
     end;
JamS007 вне форума Ответить с цитированием
Старый 21.04.2009, 23:34   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Для начала
Код:
for (true) do
- это бред, это вам не Си/Си++.
Цитата:
например надо в какое то время перейти на другую форму а выполнение на этой остановить
- эмм, интересно. А с откуда такая очень интересная информация, что формы работают в разных потоках ?
BOBAH13 вне форума Ответить с цитированием
Старый 21.04.2009, 23:42   #4
extrimportal
Пользователь
 
Аватар для extrimportal
 
Регистрация: 07.04.2009
Сообщений: 26
По умолчанию

Ну вот пример:
Код:
/ provirka najavnosti loginiv
//****************************
AssignFile(l, 'c:\WINDOWS....');
{$I-}
Append(l);
if IOResult<>0 then
 begin
  {$I-}
   Rewrite(l);

   ShowMessage('Заполните поля в настройках');

   form5.Show;// вот здесь нужно остановить работу остального кода  и работать с form5

  {$I+}
 end;
  Reset(l);
  memo2.lines.loadfromfile('c:\WINDOWS....');
closefile(l);

//начало работы
params:=TStringList.Create;
responseres:=TStringList.Create;
try
 params.Add('username='+memo2.lines[0]);
 params.Add('password='+memo2.lines[1]);

Последний раз редактировалось Stilet; 23.04.2009 в 12:06.
extrimportal вне форума Ответить с цитированием
Старый 21.04.2009, 23:50   #5
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Цитата:
Сообщение от extrimportal Посмотреть сообщение
AssignFile(l, 'c:\WINDOWS....');
{$I-}
Append(l);
if IOResult<>0 then
begin
{$I-}
Rewrite(l);

ShowMessage('Заполните поля в настройках');

form5.Show;// вот здесь нужно остановить работу остального кода и работать с form5

{$I+}
end;
Reset(l);
memo2.lines.loadfromfile('c:\WINDOW S....');
closefile(l);

//начало работы
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('username='+memo2.lines[0]);
params.Add('password='+memo2.lines[1]);
можно на том месте где переход на другую форму поставить выход из процедуры ( Exit; ).
Пример:
Код:
AssignFile(l, 'c:\WINDOWS....');
{$I-}
Append(l);
if IOResult<>0 then
 begin
  {$I-}
   Rewrite(l);

   ShowMessage('Заполните поля в настройках');
   form5.Show;// вот здесь нужно остановить работу остального кода  и работать с form5
  
    // если я правильно понял, то прерывать надо здесь
   Exit;
   // после этого процедура прервется, но осторожно с параметрами и переменными :)

  {$I+}
 end;
  Reset(l);
BOBAH13 писал:
- эмм, интересно. А с откуда такая очень интересная информация, что формы работают в разных потоках ?

Потому что они таки в разных потоках работают... Если бы они были в одном, то изменение одного параметра влияло бы на все формы. Я вижу Вы на С++ наганяете, а сами таких простых вещей не знаете! Учите С++

Последний раз редактировалось Stilet; 23.04.2009 в 12:07.
JamS007 вне форума Ответить с цитированием
Старый 22.04.2009, 00:00   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

JamS007, BOBAH13, тут вы оба не правы, все зависит от того КАК появляются другие формы(модальный, НЕмодальный вызов)

а теперь по теме
стоит разбить твой код(который долгий)
на безопасные куски(то есть если прервать выполнение то ничего страшного не произойдет, или чтобы при прерывании сброс был к примеру)
и между ними всунуть проверки...

а вообще для таких целей потоки существуют
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.04.2009, 00:02   #7
extrimportal
Пользователь
 
Аватар для extrimportal
 
Регистрация: 07.04.2009
Сообщений: 26
По умолчанию

Господа если не будете драться даже не ссорьтесь
Да это сработало. Теперь хотелось бы знать можно ли остановить работу нажатием на кнопку....
extrimportal вне форума Ответить с цитированием
Старый 22.04.2009, 00:09   #8
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

extrimportal

можно . но тут немного сложней...
Весь код следует разбить на участки, но делать это надо аккуратно, чтоб запутаться с переменными и параметрами. Скомпилируй, посмотри ничего ли не пропустил, убедись что код рабочий и правильный.
Потом, следует объявить глобальную переменную булевого типа (CanWork: boolean) (если не забыл еще, прогаю в плюсах ).
Ну а уже потом, можно между этапами кода выставить проверки типа:

// блок 1
if (CanWork = false) then exit
/// ... операторы

//блок 2
if (CanWork = false) then exit
/// ... операторы
и т. д.

А обработчике нажатия кнопки вписать CanWork = false;
JamS007 вне форума Ответить с цитированием
Старый 22.04.2009, 02:38   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Блин, да засунуть нужные действия в поток и Suspend/Resume/TerminateThread в любой момент.
пыщь
JTG вне форума Ответить с цитированием
Старый 22.04.2009, 16:01   #10
extrimportal
Пользователь
 
Аватар для extrimportal
 
Регистрация: 07.04.2009
Сообщений: 26
По умолчанию

Я простой юзер... Можно примерчик?
extrimportal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посмотреть результаты работы программы Юрий1982 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 23.11.2008 15:03
Ограничение работы программы в delphi wolf950 Помощь студентам 6 13.11.2008 21:44
Сохранение в файл работы программы devi409 Общие вопросы Delphi 12 29.04.2008 08:56
Завершение работы чужой программы Viteef Win Api 12 24.09.2007 12:31
Проверка работы программы... DimkinStd Общие вопросы Delphi 3 26.12.2006 13:24