如果程序运行超过特定时间限制,则命令 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'