boost :: asio :: io_service - 为什么要使用post函数?

时间:2011-07-31 10:08:21

标签: c++ boost

我希望有人告诉我使用post函数的优点(和缺点)。为什么以及何时应该更喜欢使用帖子以及为什么/何时我不想使用它?

2 个答案:

答案 0 :(得分:9)

当您希望回调基本上现在发生时,Post非常有用,但不是在当前上下文中。原因可能包括:

  • 当前上下文持有锁,您希望在释放函数后调用它。这将允许函数自己获取这些锁而不会导致死锁。

  • 调用堆栈可能非常深

  • 当前线程可能以某种其他方式不适合该函数,post是在另一个线程中调度函数的便捷方式。

答案 1 :(得分:0)

我猜测你正在将post()dispatch()进行比较。通常,post()更安全,因为dispatch()可能会立即调用处理程序,并且在事件驱动编程中存在以意外方式影响排队事件的风险。还有一个优点是保持调用堆栈较小,并且具有更可预测的行为(dispatch() 可以现在运行或稍后运行。)

我刚发现post()仅在当前io_service事件/处理程序/操作完成后才删除对象。