如果函数没有结束运行,则在 5 分钟内停止函数



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

我有 2 个函数在 for 循环中运行,因为我想找到随机数组中函数的解决方案。 我还有一个制作随机数组的函数。在每个循环中,由random_array乐趣制作的数组是 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 分钟之前结束。

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

将该值加 5 * 60。

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

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

C++:如何实现任意函数调用的超时?

我知道你说你不想使用线程,但 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
}

或者,也许您可以使用像kevents(freebsd)这样的东西,它有一个计时器通知,信号处理也可以解决问题。http://www.linuxquestions.org/questions/programming-9/how-to-use-sigusr1-and-sigusr2-391489/

因此,超时后,您需要向进程发送SIGUSR1,然后在信号处理程序函数中,您可以获得退出的逻辑。

最新更新