如果程序运行超过特定时间限制,则命令 kill/stop 程序
command to kill/stop the program if it runs more than a certain time limit
如果我有一个内部有无限循环的 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();
//...
}
terminate called after throwing an instance of 'TimeOutException'
如果我有一个内部有无限循环的 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();
//...
}
terminate called after throwing an instance of 'TimeOutException'