命令用于在程序运行超过一定时间限制时终止/停止程序



如果我有一个c++代码,里面有一个无限循环,我想要一个命令,将在一定时间后终止执行。所以我想到了这样的东西-

g++ -std=c++20 -DLOCAL_PROJECT solution.cpp -o solution.exe & solution.exe & timeout /t 0 & taskkill /im solution.exe /f

但是这样做的问题是,它会首先执行程序,所以由于无限循环,它甚至不会超时和taskkill部分。

是否有人有任何解决方案或其他替代超时?

我使用的是windows 10,我的编译器是gnu 11.2.0

同样在没有TLE的情况下,我不想让taskkill显示这个错误

ERROR: The process "solution.exe" not found.

你的主循环可以在一定的时间限制后退出,如果你确信它被经常调用的话。

#include <chrono>
using namespace std::chrono_literals;
using Clock = std::chrono::system_clock;
int main()
{
auto timeLimit = Clock::now() + 1s;
while (Clock::now() < timeLimit) {
//...
}
}

或者你可以在主线程中启动一个线程,在一定延迟后抛出异常:

#include <chrono>
#include <thread>
using namespace std::chrono_literals;
struct TimeOutException {};
int main()
{
std::thread([]{
std::this_thread::sleep_for(1s); 
std::cerr << "TLE" << std::endl;
throw TimeOutException{};
}).detach();
//...
}

抛出'TimeOutException'实例后终止调用

相关内容

  • 没有找到相关文章

最新更新