如果它们不运行,则在5分钟内停止运行

时间:2012-06-24 02:42:02

标签: c++ timeout

我想在我的项目中添加一项功能。

我有2个函数在for循环中运行,因为我想在随机数组中找到函数的解。我还有一个制作随机数组的函数。在每个循环中,由random_array fun创建的数组是2个函数的输入。 2个功能在屏幕上打印解决方案,他们不会返回参数。

int main(){
    for (i=0;i<50 i++)
    {
    arr1=ramdom_array();
    func1(arr1)
    func2(arr1)
    }
}

如果它们在5分钟内没有结束,我需要停止运行的功能。 我认为我必须输入这样的函数:

void func1(array<array<int,4>,4> initial)
{
while (5minutes_not_passed)
{
//do staff
if(solution==true)
break;
}
}

但我不知道在5minutes_not_passed中放入什么。

函数的声明是这样的:

void func1(array<array<int,4>,4> initial)
void func2(array<array<int,4>,4> initial)

我发现我可以使用线程库,但我不认为在线程中加入一个好主意。我相信需要像计时器这样的东西。 请注意,这些功能有时可能会在5分钟之前结束。

4 个答案:

答案 0 :(得分:3)

使用 time_t 时间获取当前秒数。

将5 * 60添加到该值。

在循环的每次迭代中,获得时间, 如果它大于或等于你的限制,则突破

答案 1 :(得分:0)

我建议在超时的线程中执行你的函数。 以下是类似问题的链接:

C++: How to implement a timeout for an arbitrary function call?

答案 2 :(得分:0)

我知道你说你不想使用线程,但是boost :: thread会让这很容易。

boost::thread t(boost::bind(func1, arr1));
if(!t1.timed_join(boost::posix_time::minutes(5))){
    // thread still running, use interrupt or detach
}

答案 3 :(得分:0)

或许你可以使用类似kevents(freebsd)的东西,它有一个定时器通知,信号处理也可以。 http://www.linuxquestions.org/questions/programming-9/how-to-use-sigusr1-and-sigusr2-391489/

因此,在超时后,您需要将SIGUSR1发送到您的进程,然后在信号处理函数中,您可以拥有退出的逻辑。