gpt4 book ai didi

c++ - 如何在指定的时间内运行程序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:47 24 4
gpt4 key购买 nike

对于计算密集型问题,我想限制程序占用的 CPU 时间:如果程序在给定时间内没有找到解决方案,我希望程序终止。与其让程序永远寻找解决方案,不如在找不到任何解决方案时终止。如果平台很重要,这是针对 UNIX 的。如何实现?

最佳答案

另一种单线程和独立的 POSIX 解决方案是使用信号:

#include <unistd.h>
#include <csignal>

std::sig_atomic_t volatile done = 0;

void game_over(int) { done = 1; }

int main()
{
std::signal(SIGALRM, game_over);
alarm(5); // this program will self-destruct in 5 seconds

while (!done)
{
do_my_thing(); // or whatever; make sure this returns frequently
}
}

(这是 volatile 极少数合法且重要的用途之一:我们必须防止编译器优化 while (!done) 条件,并且编译器看不到 done 可以改变,因为它从未在循环体内被触及。)

POSIX 不鼓励使用 std::signal 以支持它自己更强大的 sigaction。如果您有兴趣,请查阅手册,但为了发出警报的简单目的,此解决方案似乎就足够了。

如果您的程序根本不提供中断点(即您可以检查 done 的点),那么您也可以在信号处理程序中调用 abort()

关于c++ - 如何在指定的时间内运行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com