C++ Boost:启动并忘记异步函数调用?

C++ Boost:启动并忘记异步函数调用?,c++,boost,asynchronous,C++,Boost,Asynchronous,我希望以一次性方式调用函数调用。在Booost/C++ + 中最好的方法是什么? 我想传递两个参数,不需要结果。也许你想发出一个信号 我非常喜欢Qt的信号和插槽功能,我知道Boost也有信号/插槽。不过,我从未在Boost中使用过信号/插槽。好吧,你可以旋转一个线程,然后再也不要加入它。比如: boost::thread some_thread(&SomeFunction, param1, param2); 一旦some_thread变量超出范围,执行线程将被分离,并且将无法再次连接。

我希望以一次性方式调用函数调用。在Booost/C++ +

中最好的方法是什么?
我想传递两个参数,不需要结果。

也许你想发出一个信号


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

好吧,你可以旋转一个线程,然后再也不要加入它。比如:

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

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

我已经有一段时间没有使用boost::thread了,但我在上看到了一个快速示例:


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

根据您执行此操作的频率,您最好创建一个线程池和一个工作队列。如果您试图每秒执行几十次,那么创建线程可能会产生大量开销。如果你不在乎返回值,那就很容易了

旋转一两根线(或十根);有一个线程安全的要调用的functor队列(将参数绑定到函数并将其放到队列上);线程在队列上等待某些东西出现,第一个被唤醒的线程开始处理工作。当线程运行完作业后,它将再次等待队列

看看有没有一种方法可以做到这一点


当然,如果您只是每隔几秒钟进行一次异步调用以提高UI的响应能力,那么每次只启动一个新线程就更容易了。

唯一的问题是,这可能无法异步工作,如果异步工作,则可能需要设置一个事件循环,将信号“发布”到循环中。否则,你就又回到了把它扔在一根线上,然后忘记它。
void find_the_question(int the_answer);

boost::thread deep_thought_2(find_the_question,42);