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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 20:51   #1
Assa_13
Новичок
Джуниор
 
Регистрация: 15.04.2015
Сообщений: 1
По умолчанию Прерывание работы функции по нажатию кнопки

Люди добрые, не останьтесь равнодушны!
Необходимо разработать приложение, которое в общем виде представляем собой решение системы и построение графика найденного решения.
Поскольку процедура нахождения решения может быть долгой, то должна быть и возможность прервать поиск решения.
Логика понятна, а вот с реализацией проблемы. Вот как я себе представляю:
- Есть главная форма (mainForm) где пользователь задает параметры и нажимает кнопку "Найти решение";
- После этого открывается форма (progressForm) которая содержит надпись "Идет поиск решений" и кнопку
"Прервать"
- Если пользователь нажимает кнопку "Прервать" , необходимо остановить функцию поиска решения и закрыть
форму (progressForm) и дальше ничего не делать;
- Иначе, если функция отработала до конца и нашла решение, необходимо закрыть форму (progressForm) и на
форме (mainForm) отобразить график;
- Иначе, если функция отработала до конца, но не нашла решение, необходимо закрыть форму (progressForm) и
выдать сообщение о том, что функция не справилась с решением.
Вопрос заключается в том, как реализовать отображение формы progressForm с возможностью прерывания. Главная форма и функция поиска решений уже реализованы. Осталось реализовать именно возможность прерывания.
Помогите пожалуйста. Заранее спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!
Assa_13 вне форума Ответить с цитированием
Старый 16.04.2015, 21:05   #2
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Где нить в разделе private: формы объявим переменную:
Код:
bool FExit;
В конструкторе формы инициализируем ее значением
Код:
FExit = false;
или еще лучше в списке инициализации или еще в другом месте, где удобно:

Код:
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner), FExit(false)
{
}
Далее по кнопке запускаем процесс вычисления, видимо в цикле:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	while(!FExit)
	{
		// вычисления
		Application->ProcessMessages();
	}
	// это для последующего запуска процесса по этой же кнопке
       FExit = false;
       //здесь закроем форму прогресса	
         ProgressForm1->Close();
}
или
Код:
for(int i=0 ; i < 100500100; ++i)
{
// вычисления     
    Application->ProcessMessages();
     if(FExit)
           break;
}
или

Код:
do
{
     // вычисления 
     Application->ProcessMessages();
}while(!FExit);
По второй кнопке прерываем процесс:
Код:
 FExit = true;

Есть еще множество изощренных способов прерывать длительный процесс...
Знающий не говорит, говорящий не знает (С) Лао Цзы

Последний раз редактировалось Krok27; 16.04.2015 в 21:08.
Krok27 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Картинка в примечании по нажатию Кнопки uralshans Microsoft Office Excel 2 08.08.2013 14:51
Прерывание цикла нажатием кнопки truniger2011 Общие вопросы C/C++ 7 14.02.2013 17:38
FormCloseQuery по нажатию кнопки bulldog5293 Общие вопросы Delphi 3 17.10.2011 15:37
прерывание работы макроса zander Microsoft Office Excel 3 21.05.2009 21:12
Сортировка по нажатию кнопки Nate-p Microsoft Office Access 2 25.06.2008 08:35