如果我有一个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'实例后终止调用