假设我有以下内容:
action_client.cancel_all_goals()
print(action_client.get_status() != 'ACTIVE')
以上是否保证True
每次都打印?
换句话说,是SimpleActionClient.cancel_all_goals()
在返回之前取消所有目标,还是只是发送指令取消目标而不等待目标真正取消?
action_client.cancel_all_goals()
只需发送指令取消目标而无需等待。
由于该方法的文档不是很有帮助,您需要查看action_client.h或action_client.py以了解发生了什么。
该代码显示,要取消所有目标,只需发布一条简单的消息(self.pub_cancel.publish(cancel_msg)
或self.pub_cancel.publish(cancel_msg)
)。这意味着调用是异步的,不会阻塞。
这意味着您的代码
action_client.cancel_all_goals()
print(action_client.get_status() != 'ACTIVE')
通常会打印False
,但这不能保证,因为:
PREEMPTED
, ABORTED
, ... 之前cancel_all_goals
和get_status
由于线程切换而被取消。