21 / 21 / 6
Регистрация: 09.01.2014
Сообщений: 118

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

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

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Подскажите, есть ли возможность прерывать программу во время выполнения? Т.е. у меня в программе есть цикл, который может выполняться много тысяч раз, сто выполнений цикла может происходить от 5 до 30 и более секунд, на каждых 100 циклах есть вывод промежуточных результатов. Если я по ним вижу, что эффективности я не получаю - я хочу перезапустить цикл с другими параметрами которые могу поменять не в коде, а до запуска цикла в самом интерфейсе программы, но остановить её могу только в компиляторе или диспетчере задач. Возможно ли как-то сделать так, чтоб программа не переставала реагировать на действия во время выполнения цикла?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2014, 08:21
Ответы с готовыми решениями:

Консоль закрывается в процессе выполнения программы - С++
В Visual Studio в процессе выполнения программы и в процессе работы закрывается через какое- то время консоль, сразу же открывается как...

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

Динамическая линковка dll в процессе выполнения программы
Есть dll с пространством имен парой функций и классов пример //MyDll.cpp namespace NS{ class FSomeClass{ }

38
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 15:56
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ilja123 Посмотреть сообщение
Крестик удел юзеров
Хм.. А я тут подумал и понял, что не уверен, действительно ли закрытие крестиком завершит процесс...
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
10.01.2014, 15:58
Куда он денется У Windows все козыря в руках
0
21 / 21 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:00  [ТС]
Цитата Сообщение от Qwertiy Посмотреть сообщение
Эм.. Чего бы тогда просто крестиком не закрывать???
Потому что в момент выполнения цикла окно не реагирует абсолютно ни на что. Да и не закрыть мне надо программу, а прервать, чтобы тут же изменить параметры и запустить заново. Параметры у меня на форме меняются, не в коде.
Программу в этот момент могу закрыть только в диспетчере задач или остановить выполнение в компиляторе. Больше никак.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 16:03
Если не консоль, то свои методы обработки событий есть. Но это уже другой раздел форума.
1
21 / 21 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:05  [ТС]
alsav22, мне в С++ и WinAPI стучаться?
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
10.01.2014, 16:08
Цитата Сообщение от alsav22 Посмотреть сообщение
другой раздел
какой другой? Обработать нажатие клавиш Этож не сложно
Я не понял у вас windows? вы wiinapi используйте?? Там же просто в обработку сообщений (цикл) написать типа
C++
1
2
3
4
case WM_KEYDOWN:
    switch (wParam) {
        case VK_ESPAPE:
                       Остановить этот несчастный цикл
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 16:13
Цитата Сообщение от Victorianec Посмотреть сообщение
мне в С++ и WinAPI стучаться?
Среда какая? Builder?
0
21 / 21 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:16  [ТС]
Цитата Сообщение от ilja123 Посмотреть сообщение
Я не понял у вас windows? вы wiinapi используйте??
да, Windows. Отнеситесь с пониманием, что я в раздел "Для новичков" не просто так написал. Вобщем пишу в Билдере, VCL приложение. на форму накидал нужные кнопки, по нажатию одной из них запускается цикл на выполнение. Это WinAPI?

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

Для того, чтобы это вообще работало, нужно поместить вычисления в отдельный поток. Либо вызывать DoEvents (не знаю, есть ли нечто подобное в Си++), чтобы продолжалась обработка событий формы. Ну и в случае с DoEvents флаг - наиболее логичное решение.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 16:22
Цитата Сообщение от Victorianec Посмотреть сообщение
да, CodeGear C++ Builder 2009
Точно не знаю, но, по-моему, в Builder своё есть для этих дел. https://www.cyberforum.ru/cpp-builder/
1
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 16:23
Оу.. Пока я вернулся и написал пост тут уже столько всего появилось...
ilja123, если выполнение вычислений блокирует форму, то они происходят в том же потоке и никакие события до их завершения не произойдут. Если это не изменить, то никакие обработчики не помогут.
1
21 / 21 / 6
Регистрация: 09.01.2014
Сообщений: 118
10.01.2014, 16:35  [ТС]
ilja123, Всё что нашел касательно ВинАПИ выглядит так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
USEFORM("Main.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TForm1), &Form1);
        Application->Run();
 
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
 
    return 0;
}
Добавлено через 10 минут
В общем спасибо всем, кто отозвался. Через несколько дней сдам её и больше не вспомню даже. Не буду на этом терять своё время и отнимать ваше.
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
10.01.2014, 16:52
Вставьте где-нибудь в цикл
C++
1
Application->ProcessMessages();
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
10.01.2014, 17:10
Цитата Сообщение от Victorianec Посмотреть сообщение
Код C++
Это что-то весьма странное и полозрительное... Что это и зачем???
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
11.01.2014, 18:30
Цитата Сообщение от Qwertiy Посмотреть сообщение
Что это и зачем???
Так выглядит головной модуль проекта Borland CBuilder 6.0
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
11.01.2014, 23:46
Цитата Сообщение от Black Fregat Посмотреть сообщение
Так выглядит головной модуль проекта Borland CBuilder 6.0
А что за магический try-throw-catch во втором catch'е?
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
12.01.2014, 05:07
Я так предполагаю, чтобы обработку исключений, которые не Exception, подсунуть тому же обработчику.
Но вообще-то этот код CBuilder делает сам, никому без особой просьбы не показывает и переписывает при изменениях без предупреждения. Так что что там и зачем простому смертному остается только догадываться.
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
12.01.2014, 10:22
А может и не магия совсем. Вы видели какой код создает визуальный редактор HTML
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2014, 10:22

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

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

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

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

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


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

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

Новые блоги и статьи
Теория всего 6. Судьба неотвратима?
anaschu 21.07.2026
Математическое доказательство Судьбы: Точка бифуркации в едином тензорном ядре Модели ВсегоСвежее обновление питоновского ядра «Soil Chemistry 2. 0» дало нам неопровержимое математическое. . .
Теория всего 5. ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли
anaschu 21.07.2026
Единое ядро Теории Всего: Математический изоморфизм репликаторов и иллюзия свободы воли Главная задача «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы» (аттракторов. . .
сукцессия 37. Внедрил дипсик в свой оркестр из ИИ. У него закончилось пространство чата, потому опубликую выводы из его работы здесь
anaschu 21.07.2026
==================================================================== КОНТЕКСТ: Моделирование микоризной сукцессии (AM → ECM) ==================================================================== . . .
сукцессия 36. Делаю прогоны модели около порога бифуркации (превращения эндо микоризы в экто микоризу)
anaschu 21.07.2026
СУКЦЕССИЯ МИКОРИЗ: КАК МАТЕМАТИКА ОБЪЯСНЯЕТ ПОДЗЕМНУЮ ВОЙНУ Мы привыкли думать, что лес — это деревья. А грибы — это то, что мы собираем в корзинку осенью. Но если заглянуть под землю, окажется,. . .
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru