Блог пользователя ZHIRDILBILDIZ

Автор ZHIRDILBILDIZ, история, 7 месяцев назад, По-русски

Добрый день сообщество. Сегодня я хочу спросить у вас: "Возможно ли написать код на C++, который запускает другую программу на "test.txt" и проверяет её на превышение лимита времени, а также останавливает её если она отработала более 1-ой секунды?". Я искал ответ на этот вопрос у chat-gpt и gemini, но ничего стоящего они мне не выдали. Если вы знаете ответ на этот вопрос, то подскажите как это написать, а если вы ещё напишите код, то честь вам и хвала. Заранее спасибо.

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

»
7 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
#include <iostream>
#include <chrono>

int main() {
  // Starting time
  auto start = std::chrono::high_resolution_clock::now();
// your code here
	for(int i = 1;i <= 10;i++){
 		std::cout << i << '\n';	
	}

  // Ending time
  auto end = std::chrono::high_resolution_clock::now();

  // Calculate elapsed time in seconds
  auto duration = std::chrono::duration_cast<std::chrono::seconds>(end - start);

  std::cout << "Time taken: " << duration.count() << " seconds" << std::endl;
  return 0;
}

this is gemini's answer for your question hope this will help

  • »
    »
    7 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Ты же понимаешь что эта программа не останавливает мою в случае превышения лимита времени. P.S. Представь что моя программа это while(true).

»
7 месяцев назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

В данной постановке задача сводится к запуску секундомера, как указали выше (на смартфоне или в программе). Но в более общем случае (остановится ли программа хоть когда-то) решения не существует. Это называется проблема остановки, и она не разрешима на машине Тьюринга.

  • »
    »
    7 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    То есть вы утверждаете что я не могу запустить, например main.cpp через builder.cpp и в случае, когда main.cpp отработает больше одной секунды завершить main.cpp и вернуть "time_limit". Данное утверждение звучит крайне сомнительно.

    • »
      »
      »
      7 месяцев назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Нет. Я утверждаю, что в общем случае ваш скрипт не сможет определить, отработает ли main.cpp за конечное время. Тут речь не про 1, 2 или 5 секунд.

»
7 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

в C++20 добавили корутины, с ними это реализуемо, изучай

  • »
    »
    7 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Интересно, обязательно поинтересуюсь, что это такое и что из себя представляет.

»
7 месяцев назад, # |
Rev. 2   Проголосовать: нравится +9 Проголосовать: не нравится

man fork, man exec. Код, надеюсь, сможешь самостоятельно написать.

Ограничение на процессорное время можно выставить через setrlimit.