Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.98/48: Рейтинг темы: голосов - 48, средняя оценка - 4.98
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337

Остановка выполнения программы на C++

16.11.2019, 21:49. Показов 10558. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане! Столкнулся со следующей проблемой. Сейчас работаю над проектом (отправка кодов решений на C++ и их проверка на сервере с помощью PHP). Получается отправить программу из окна редактора и проверить ее с помощью тестов, а также замерить время выполнения каждого теста, но возникает проблема, замер времени происходит только после запуска и завершения программы, а мне нужно выйти из нее до ее завершения по исчечении 1-2 секунд (то есть, обработать ошибку TLE (Time Limit Exceeded)). Средставми PHP этого достигнуть не получается, так как необходим выход из программы до ее завершения. Поэтому, я решил делать остановку внутри кода на C++. Я никогда раньше не делал такого и нужно приблизительно следущее:

Код программы на C++:

C++
1
2
3
#include <iostream>
 
    using namespace std;
C++
1
Здесь функция остановки программы, если ее работа превышает 1-2 секунды
C++
1
2
3
4
int main() {
    Код программы...
return 0;
}
Нужна именно функция, а не просто замер времени внутри программы, так как планируется, что человек отправит свое решение, а я просто добавлю к коду эту функцию и если программа проработает больше указанного времени, то завершится ее работа.

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

Добавлено через 39 минут
Получилось сделать замер в начале и конце программы, но я не уверен, что это наилучший вариант. Вот, что получилось:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <climits>
#include <fstream>
#include <chrono> 
 
    using namespace std;
 
int main() {
    
    auto start = chrono::high_resolution_clock::now();
    
    ifstream in("input.txt");
    int n, m, x, y, max;
    in >> n >> m;
    int** a = new int*[n];
    for (int i = 0; i < n; i++) {
        a[i] = new int[m];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            in >> a[i][j];
        }
    }
    for (int i = 1; i <= 400000000; i++); //Задержка выполнения ~ 0.6 сек.(на моем PC)
    max = INT_MIN;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (a[i][j] > max) {
                max = a[i][j];
                x = i;
                y = j;
            }
        }
    }
    cout << ++x << " " << ++y << "\n";
    for (int i = 0; i < n; i++) {
        delete[] a[i];
    }
    delete[] a;
    
    auto finish = std::chrono::high_resolution_clock::now();
    auto duration = chrono::duration_cast<chrono::microseconds>(finish - start).count();
    cout.precision(3);
    cout << "Elapsed time: " << fixed << (double)duration / 1000000.0 << "\n";
    
    return 0;
}
Может быть, у кого-то есть еще какие-нибудь идеи...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2019, 21:49
Ответы с готовыми решениями:

Остановка выполнения консольной программы без system("pause")
Всем привет. Ищу нормальный способ, который работает всегда и везде. Такой способ это нормальный? #include &lt;iostream&gt; #include...

Непонятная остановка программы
Не могу понять в чем причина торможения программы. Запускаю ее, она виснет и не завершается. Все, что удалось выяснить - проблема с...

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

62
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 21:40  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
флажок C++11 подняли?
Да, пробовал подключать стандарты: C++11, C++14, C++17. Может быть, нужно переустановить компилятор. DrOffset Что касается boost, я проверял. Библиотека работает. Что-то не так у меня, наверное, установлено.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 21:43
Цитата Сообщение от Fixer_84 Посмотреть сообщение
DrOffset Что касается boost, я проверял. Библиотека работает.
У вас работало скорее всего то, что не требует линковки собранных библиотек. Т.е. header-only часть буста.
А я говорю, что либы буста, скомпилированные у вас, от другого компилятора, не подходящего к вашему.
Разбирайтесь.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 21:48  [ТС]
DrOffset, насчет этой ошибки: error: 'this_thread' has not been declared
Советуют использовать: "Use MinGW with POSIX threads", но я не знаю, что это значит.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 21:50
Fixer_84, вот если вы не будете игнорировать что я вам пишу, то очень быстро и узнаете
Такой MinGW есть в MSYS2, и по той ссылке, что я скинул выше по ветке.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.11.2019, 21:54
Цитата Сообщение от DrOffset Посмотреть сообщение
Это значит, что его std собрана без поддержки std::thread.
ещё выше был скрин с VS, где свои либы std
а щас уже gcc4.9.2
Цитата Сообщение от DrOffset Посмотреть сообщение
По этой же причине у него не работает мой код.
причину дожлжны быть разные.

MinGW TDM 4.9.2 64 и 32 версии (те что стандартно уже лет 5 идут вместе с Dev C++)
всё работает.

на кодеблоке проверить версию стандарта здесь:
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 21:54  [ТС]
DrOffset, У меня рядом компьютер с Ubuntu стоит. Говорят, что такой проблемы там нет. Сейчас попробую запустить еще там и вам отпишусь.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.11.2019, 21:57
вот ссылка(иде вместе с компилятором 4.9.2)
https://sourceforge.net/projec... 0Releases/

за 5 лет проверено, работает всё как часы(в плане компиляции)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 21:59
Цитата Сообщение от XLAT Посмотреть сообщение
причину дожлжны быть разные.
Нет, причины одинаковые.

Цитата Сообщение от XLAT Посмотреть сообщение
на кодеблоке проверить версию стандарта здесь:
Что не понятного в фразе "это ему не поможет"?
ТС сам уже подтвердил, что не помогло. Зачем вы тратите мое время на эти бесполезные споры?

Цитата Сообщение от XLAT Посмотреть сообщение
ещё выше был скрин с VS, где свои либы std
В #14 был скрин из VS. Потом ТС сказал, что будет пробовать в C::B.

Добавлено через 1 минуту
Цитата Сообщение от XLAT Посмотреть сообщение
MinGW TDM 4.9.2 64 и 32 версии (те что стандартно уже лет 5 идут вместе с Dev C++)
всё работает.
Никто не говорит, что не бывает сборок TDM с Pthreads. Но в случае ТС это не так. Ошибка известная. Спорить нет смысла.
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
18.11.2019, 22:09
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем вы тратите мое время на эти бесполезные споры?
вы полностью свободны для своих дел.
мне ваше время без надобности.

Цитата Сообщение от DrOffset Посмотреть сообщение
что не бывает сборок TDM с Pthreads
posix не нужен! 4.9.2. поддерживает C++11
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 22:14
Fixer_84, с Windows всегда проблемы, если пытаться собирать себе окружение по кусочкам. Лично я уже наелся этих приколов с зависимостями еще в 2005 году, к сожалению тогда не было замечательного MSYS2 (убогий MSYS(1) без пакетного менеджера не в счет).
Еще ни один человек, которому я насоветовал отказаться от отдельных MinGW и библиотек к нему в пользу единого окружения MSYS2, не жаловался А их уже, посчитать если, больше 10 человек тут.

Добавлено через 4 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
posix не нужен! 4.9.2. поддерживает C++11
На Windows есть две модели потоков в MinGW - основанная на pthreads и основанная на win32-threads.
Первая всегда была стабильней и появилась раньше.
С++11, std::thread и Со, которые поддерживается в minGW, должны быть реализованы посредством одной из этих моделей. TDM реализуется через posix model (pthreads).
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 22:17  [ТС]
DrOffset, сейчас запустил код из поста 30 на Ubuntu. Всего одна ошибка осталась - эта:

Undefined reference to 'pthread_create'

Снимок сделать пока не могу, не знаю что нужно для этого в Ubuntu. Я еще boost установлю и вам отпишусь.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 22:25
XLAT, откройте установленный по ссылке, которую вы дали, каталог bin в mingw и увидите там библиотеки libwinpthread-1.dll или libwinpthread_64-1.dll. Или обе сразу, я уже не помню. В общем, это то, о чем я сказал чуть выше.
https://stackoverflow.com/ques... x-vs-win32

Добавлено через 1 минуту
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Undefined reference to 'pthread_create'
Добавьте линковщику ключ -pthread.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 23:05  [ТС]
DrOffset, извините, но я этих тонкостей почти не знаю. Где именно это нужно прописать?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 23:10
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Где именно это нужно прописать?
Зависит от того, как вы собираете. Если в консоли, то там же, в командной строке.
Если в CodeBlocks, то на вкладке Linker settings, в окошке Other Linker Options.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.11.2019, 23:31  [ТС]
DrOffset, мне удалось запустить вашу программу. Если у меня возникнут дополнительные вопросы по ее работе, я могу к вам обратиться?

Добавлено через 1 минуту
DrOffset, Также, я попробую запустить программу с boost и вам обязательно отпишусь. Спасибо большое, что помогли.
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
18.11.2019, 23:35
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Если у меня возникнут дополнительные вопросы по ее работе, я могу к вам обратиться?
Да, конечно.
Для использования в боевом режиме его все равно нужно еще модифицировать. Добавить возможность сигнализировать о статусах работы в вызывающее окружение (в php, я так понимаю), добавить обработку исключений, чтобы программа не падала, если пользовательский код каким-то образом будет их кидать, для Linux я бы еще добавил обработку сигналов.
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
20.11.2019, 00:39  [ТС]
XLAT, здравствуйте! Ваш код из поста 29 рабочий. Я только что запустил его. Спасибо вам! Сейчас ложусь спать не могу больше разговаривать.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
20.11.2019, 00:46  [ТС]
DrOffset, здравствуйте! Установил библиотку boost на Ubuntu, запустил, проверил, она работает, но ваш код с boost выдает ошибки. Вот скриншот. Я сейчас спать ложусь, только завтра смогу увидеть ваш ответ. Спасибо за ваш труд.
Миниатюры
Остановка выполнения программы на C++  
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
20.11.2019, 01:21
Цитата Сообщение от Fixer_84 Посмотреть сообщение
boost выдает ошибки
повторяюсь,
Остановка выполнения программы на C++
но сделайте же наконец это!


вот было:


Что нужно сделать!


чтобы стало так:
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
20.11.2019, 08:39
del
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.11.2019, 08:39

Остановка программы при нажатии клавиши BS
Напишите программу, выполняющую вывод на экран произвольных наборов символов до тех пор, пока не будет нажата клавиша BS Заранее...

Как реализовать задержку выполнения определённой части программы без полной задержки всей программы?
Ниже представлен упрощённый код игры, в которой герой управляется ПКМ и подбирает предметы ЛКМ, которые перемещаются в инвентарь....

Остановка программы без предложения "Нажать любую клавишу"
в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в плюсах? кроме system(&quot;pause&quot;)?...

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru