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

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

16.11.2019, 21:49. Показов 10142. Ответов 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
19496 / 10101 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
20.11.2019, 08:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fixer_84 Посмотреть сообщение
но ваш код с boost выдает ошибки. Вот скриншот.
На первой странице темы я в #11 сообщении указал что нужно делать.
Цитата Сообщение от DrOffset Посмотреть сообщение
нужно указать для линковки библиотеки boost_system, boost_thread и boost_chrono.
В C::B должно быть так:
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
23.11.2019, 18:44  [ТС]
DrOffset, здравствуйте! Программу удалось запустить благодаря вашему скриншоту. Спасибо большое!
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
07.12.2019, 17:22  [ТС]
DrOffset, здравствуйте! Еще раз хотел поблагодарить вас и XLAT за вашу неоценимую помощь. У нас получилось внедрить ваш код из поста #30 в проект. Ошибка TLE отлавливается корректно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2019, 17:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
63
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru