我想在我的项目中添加一个功能。
我有 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,然后在信号处理程序函数中,您可以获得退出的逻辑。