我想在我的项目中添加一项功能。
我有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分钟之前结束。
答案 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发送到您的进程,然后在信号处理函数中,您可以拥有退出的逻辑。