Boost:触发并忘记异步函数调用?
时间:2020-03-06 14:57:03 来源:igfitidea点击:
我想一口气调用一个函数调用。在Boost / C ++中执行此操作的最佳方法是什么?
我想给它传递两个参数,不需要结果。
解决方案
也许我们想发出信号?
我真的很喜欢Qt的信号和插槽功能,而且我知道Boost也有信号/插槽。不过,我从未在Boost中使用过信号/插槽。
好了,我们可以启动一个线程,然后再也不会加入它。就像是:
boost::thread some_thread(&SomeFunction, param1, param2);
一旦some_thread变量超出范围,执行线程将被分离并且将无法再次加入。除非为此函数的处理时间很长,否则旋转线程是很浪费的。
我有一段时间没有使用boost :: thread了,但是我在该类的文档页面上看到了一个简单的示例:
void find_the_question(int the_answer); boost::thread deep_thought_2(find_the_question,42);
我相信,一旦完成该功能,线程将退出。这可能不是我们想要的,因为一旦线程超出范围,它将被销毁。如果这不起作用,则可能需要创建一个运行时间较长的线程池,然后将函子作为boost :: bind组合传递。
根据执行操作的频率,最好创建一个线程池以及一个工作队列。如果我们尝试每秒执行数十次操作,则创建线程可能会产生大量开销。如果我们不关心返回值,那将使其变得非常容易。
旋转一根或者两根(或者十根)螺纹;具有要调用的线程安全的函子队列(将参数绑定到函数并将其放在队列中);线程在队列中等待出现的东西,第一个唤醒的线程开始处理工作。线程完成运行作业后,它将再次在队列上等待。
请看一下这个项目,了解实现它的一种方法。
当然,如果我们仅每隔几秒钟进行一次异步调用来提高UI的响应速度,那么每次启动一个新线程会更容易。