提升:火灾和忘记异步函数调用?

时间:2008-09-30 22:04:52

标签: c++ boost asynchronous

我想以一次性方式调用函数调用。在Boost / C ++中执行此操作的最佳方法是什么?

我想传递两个参数,不需要结果。

4 个答案:

答案 0 :(得分:3)

嗯,你可以启动一个线程然后再也不加入它。类似的东西:

boost::thread some_thread(&SomeFunction, param1, param2);

一旦some_thread变量超出范围,执行线程将被分离,并且将无法再次连接。除非此函数的处理时间很长,否则启动线程是一种浪费。

答案 1 :(得分:3)

我有一段时间没有使用过boost :: thread,但我在documentation page for the class上看到了一个简单的例子:

void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);

我相信一旦完成该功能,线程就会退出。这可能不是你想要的,一旦线程超出范围,它将被销毁。如果这不起作用,您可能需要创建一个长时间运行的线程池,然后将您的仿函数作为boost :: bind组合传递。

答案 2 :(得分:1)

根据您执行此操作的频率,最好创建一个线程池以及一个工作队列。如果你试图每秒做几十次,创建一个线程会产生很多开销。如果您不关心返回值,那么这很容易。

旋转一两个线程(或十个);有一个线程安全的仿函数队列来调用(将参数绑定到函数并将其放在队列中);线程在队列上等待显示的东西,第一个被唤醒的线程得到处理工作。线程完成运行作业后,它会再次等待队列。

看看this project,了解一种方法。

当然,如果您每隔几秒钟只进行异步调用以提高UI的响应速度,那么每次启动新线程都会更容易。

答案 3 :(得分:0)

也许你想发出信号?

我非常喜欢Qt的信号和插槽功能,我知道Boost也有信号/插槽。不过,我从来没有在Boost中使用信号/插槽。