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

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

16.11.2019, 21:49. Показов 11006. Ответов 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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
18.11.2019, 21:50
Fixer_84, вот если вы не будете игнорировать что я вам пишу, то очень быстро и узнаете
Такой MinGW есть в MSYS2, и по той ссылке, что я скинул выше по ветке.
0
Just Do It!
 Аватар для XLAT
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 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
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
18.11.2019, 21:57
вот ссылка(иде вместе с компилятором 4.9.2)
https://sourceforge.net/projec... 0Releases/

за 5 лет проверено, работает всё как часы(в плане компиляции)
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
18.11.2019, 22:09
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем вы тратите мое время на эти бесполезные споры?
вы полностью свободны для своих дел.
мне ваше время без надобности.

Цитата Сообщение от DrOffset Посмотреть сообщение
что не бывает сборок TDM с Pthreads
posix не нужен! 4.9.2. поддерживает C++11
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
4221 / 2686 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
20.11.2019, 01:21
Цитата Сообщение от Fixer_84 Посмотреть сообщение
boost выдает ошибки
повторяюсь,
Остановка выполнения программы на C++
но сделайте же наконец это!


вот было:


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


чтобы стало так:
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
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
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru