1

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

我有 2 个函数在 for 循环中运行,因为我想在随机数组中找到函数的解决方案。我还有一个生成随机数组的函数。在每个循环中,由 random_array fun 生成的数组是 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

4 回答 4

3

使用time_ttime获取当前秒数。

将 5 * 60 添加到该值。

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

于 2012-06-24T02:45:54.657 回答
0

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

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

于 2012-06-24T03:02:20.690 回答
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
}
于 2012-06-24T03:06:23.997 回答
0

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

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

于 2012-06-24T03:10:21.507 回答