【发布时间】:2013-04-10 14:51:40
【问题描述】:
我正在寻找一种方法(最好使用 boost 线程),如果线程尚未加入,则中断它。我启动了多个线程,并希望在 200 毫秒内结束其中的任何一个。我试过这样的东西
boost::thread_group tgroup;
tgroup.create_thread(boost::bind(&print_f));
tgroup.create_thread(boost::bind(&print_g));
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
tgroup.interrupt_all();
现在可以了,所有线程都在 200 毫秒后结束;但是,如果它们在 200 毫秒之前完成,我想尝试加入这些线程,如果在一定时间内没有完成,有没有办法加入和中断?
编辑:我需要在超时之前加入的原因:
我正在创建一个速度非常重要的服务器。不幸的是,我必须向其他服务器请求一些信息。所以我想并行进行这些调用,并尽快完成。如果服务器花费的时间太长,我必须忽略来自该服务器的信息,并在没有它的情况下继续。所以我的超时时间是我可以等待的最长时间。当收到所有响应时,能够继续沉思,而不是等待超时计时器,这对我来说是非常有益的。那么我的程序将是什么:
-从客户端获取请求。
-解析信息。
创建话题
-向多个其他服务器发送信息。
-从服务器获取信息。
-将来自服务器的信息放在共享队列中。
结束线程
-从共享队列中解析信息。
-将信息返回给客户端
【问题讨论】:
-
缺失的信息如何影响结果的计算?如果仍然缺少某些信息,您是否打算等待最长时间?
-
缺少信息影响不大。你可以认为它是一个出价。给定我提供的信息,每台服务器都会回复一个出价。如果他们没有及时归还任何东西,他们就无法出价。理想情况下,我希望所有服务器都响应,因为我将拥有最多的出价和最多的可用选择,但是如果服务器没有及时响应也没有问题。因此,只需切断我的开放连接并继续策略。
标签: c++ multithreading boost boost-thread