假设我有一个原型如下所示的函数,属于类container_class:
std::vector<int> container_class::func(int param);
该函数可能会或可能不会在某些输入上产生无限循环;无法确定哪些输入会导致成功,哪些输入会导致无限循环.该函数在一个库中,我没有源代码,也无法修改(这是一个bug,将在几个月内在下一个版本中修复,但是现在我需要一种方法来解决它),所以修改功能或类的解决方案将无法正常工作.
我尝试使用std :: async和std :: future隔离函数,并使用while循环不断检查线程的状态:
container_class c(); long start = get_current_time(); //get the current time in ms auto future = std::async(&container_class::func,&c,2); while(future.wait_for(0ms) != std::future_status::ready) { if(get_current_time() - start > 1000) { //forcibly terminate future } sleep(2); }
这段代码有很多问题.一个是我不能强行终止std :: future对象(以及它所代表的线程).
在极端情况下,如果我找不到任何其他解决方案,我可以在自己的可执行文件中隔离该函数,运行它,然后检查其状态并适当地终止它.但是,我宁愿不这样做.
我怎么能做到这一点?有没有比我现在做的更好的方式?