С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
#1

Прерывание программы в процессе выполнения - C++

10.01.2014, 08:21. Просмотров 2255. Ответов 38
Метки нет (Все метки)

Доброго времени суток!
Подскажите, есть ли возможность прерывать программу во время выполнения? Т.е. у меня в программе есть цикл, который может выполняться много тысяч раз, сто выполнений цикла может происходить от 5 до 30 и более секунд, на каждых 100 циклах есть вывод промежуточных результатов. Если я по ним вижу, что эффективности я не получаю - я хочу перезапустить цикл с другими параметрами которые могу поменять не в коде, а до запуска цикла в самом интерфейсе программы, но остановить её могу только в компиляторе или диспетчере задач. Возможно ли как-то сделать так, чтоб программа не переставала реагировать на действия во время выполнения цикла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 08:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прерывание программы в процессе выполнения (C++):

Выводятся непонятные сообщения в процессе выполнения программы - C++
Всем доброго дня ! Подскажите пожалуйста , почему при выводе строки (160) cout<<"\n******* "<<EmptyClass.GetName()<<" is...

Выделение памяти в процессе выполнения функции - C++
есть массив указателей на int, объявленный глобально int* arr; но заранее я не знаю, сколько мне понадобится одномерных массивов -...

Прерывание программы по ESC C++ - C++
доброй ночи Добрался до такой вот темы Пытаюсь реализовать перехват нажатия клавиши ESC и SPACE в консольном режиме Но программа не...

Можно ли "подменить" тип данных в процессе выполнения? - C++
Добрый день! Есть у меня такой кусок кода, описывающего класс. typedef vector<double> complex; typedef map<string, double>...

Указать тип массива в процессе работы программы - C++
Доброго времени суток, господа! Необходимо создать массив, тип данных которого будет задаваться в зависимости от значения переменной (1, 2...

Динамические массивы. Ошибка в процессе работы программы. - C++
по заданию нужно сделать все с помощью функций , написал код и запутался , программа запускается но выдает ошибку в процессе работы ...

38
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 15:41  [ТС] #16
alsav22, варианты с kbhit() не помогли.
ilja123, вставить while((c=getchar()) != 'e') тоже не сработает - не консоль у меня
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 15:44 #17
Victorianec, У вас Windows? Ну так WM_KEYDOWN вам в помощ
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 15:51 #18
Цитата Сообщение от Victorianec Посмотреть сообщение
варианты с kbhit() не помогли.
Что значит не помогли? Не срабатывает выход из цикла, или что?
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 15:52 #19
Цитата Сообщение от alsav22 Посмотреть сообщение
Что значит не помогли?
Цитата Сообщение от Victorianec Посмотреть сообщение
не консоль у меня
Эм.. Чего бы тогда просто крестиком не закрывать???
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 15:55 #20
Qwertiy,
Цитата Сообщение от Qwertiy Посмотреть сообщение
Чего бы тогда просто крестиком не закрывать???
Эм.. Не по программистки это

Добавлено через 25 секунд
Крестик удел юзеров

Добавлено через 1 минуту
Настоящий программист ВСЕГДА закрывает окно перехватом нажатия клавиши Escape!
0
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 15:56 #21
Цитата Сообщение от ilja123 Посмотреть сообщение
Крестик удел юзеров
Хм.. А я тут подумал и понял, что не уверен, действительно ли закрытие крестиком завершит процесс...
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 15:58 #22
Куда он денется У Windows все козыря в руках
0
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:00  [ТС] #23
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эм.. Чего бы тогда просто крестиком не закрывать???
Потому что в момент выполнения цикла окно не реагирует абсолютно ни на что. Да и не закрыть мне надо программу, а прервать, чтобы тут же изменить параметры и запустить заново. Параметры у меня на форме меняются, не в коде.
Программу в этот момент могу закрыть только в диспетчере задач или остановить выполнение в компиляторе. Больше никак.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 16:03 #24
Если не консоль, то свои методы обработки событий есть. Но это уже другой раздел форума.
1
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:05  [ТС] #25
alsav22, мне в С++ и WinAPI стучаться?
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 16:08 #26
Цитата Сообщение от alsav22 Посмотреть сообщение
другой раздел
какой другой? Обработать нажатие клавиш Этож не сложно
Я не понял у вас windows? вы wiinapi используйте?? Там же просто в обработку сообщений (цикл) написать типа
C++
1
2
3
4
case WM_KEYDOWN:
    switch (wParam) {
        case VK_ESPAPE:
                       Остановить этот несчастный цикл
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 16:13 #27
Цитата Сообщение от Victorianec Посмотреть сообщение
мне в С++ и WinAPI стучаться?
Среда какая? Builder?
0
Victorianec
20 / 20 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:16  [ТС] #28
Цитата Сообщение от ilja123 Посмотреть сообщение
Я не понял у вас windows? вы wiinapi используйте??
да, Windows. Отнеситесь с пониманием, что я в раздел "Для новичков" не просто так написал. Вобщем пишу в Билдере, VCL приложение. на форму накидал нужные кнопки, по нажатию одной из них запускается цикл на выполнение. Это WinAPI?

Добавлено через 46 секунд
Цитата Сообщение от alsav22 Посмотреть сообщение
Среда какая? Builder?
да, CodeGear C++ Builder 2009
0
ilja123
43 / 43 / 7
Регистрация: 24.12.2009
Сообщений: 404
10.01.2014, 16:17 #29
ну найдите в коде должно быть
case WM_KEYDOWN:
switch (wParam) {
1
Qwertiy
821 / 629 / 75
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 16:21 #30
Обрабатываешь клик по кнопке стоп, дальше есть несколько вариантов:
1. Меняешь глобальный флаг, который проверяется в цикле. Если итерации тяжеловесные, то проверка флага на длительности работы почти не скажется.
2. Делаешь переменную цикла глобальной и меняешь её, чтобы цикл завершился. Поганый вариант.
3. Делаешь указатель на переменную цикла глобальным и через него меняешь. Тоже погано, но есть вероятность, что такой вариант, по сравнению с предыдущим, позволит компилятору нормально применить оптимизации.
4. Делаешь глобальный указатель на функцию или класс, содержаций функцию отмены текущего действия. Перед входом в цикл присваиваешь эту штуку, перед выходом сбрасываешь в null. Ну а вызов метода выполняет отмену вычислений каким-либо образом.

Для того, чтобы это вообще работало, нужно поместить вычисления в отдельный поток. Либо вызывать DoEvents (не знаю, есть ли нечто подобное в Си++), чтобы продолжалась обработка событий формы. Ну и в случае с DoEvents флаг - наиболее логичное решение.
1
10.01.2014, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 16:21
Привет! Вот еще темы с ответами:

Подключение библиотеки в процессе выполенния программы - C++
имеется следующая задача - в процессе выполнения прога формирует данные на основе которых проиходит выбор функций дальнейших обработок....

Задержка выполнения программы - C++
Ребята, помогите найти проблему плз.. Дело в том, что при запуске программы она висит 20 сек, и только потом передается управление...

Завершение выполнения программы - C++
Добрый вечер. Пишу рогалик. Нужно сделать, что бы когда герой умирал (при вызове его деструктора) до того как программа крашнется...

Приостановка выполнения программы - C++
Подскажите пожалуйста, можно ли в си как-нибудь реализовать приостановку выполнения программы на несколько секунд? Нужно что-то вроде...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.