ros::spinonce()一般與loop_rate.sleep()同時出現,用來控制處理回調函數的頻率,並且沒有消息就收來時,就會程序堵塞,不會占用CPU資源。
ros::spin(),用於回調函數的處理,並且執行這段程序就會進入無限次循環(消息來一次,回調函數就會立即處理一次,沒有閱讀到消息的時候,spin循環將會堵塞,不會占用CPU資源),直到ctrl_c來臨,或者其他終止信號來臨。一般所有的程序都寫在這段語句之前,因為其之后的程序,不會被執行。
兩條語句與publish沒有關系,只與回調函數有關系。
兩者都是為回調函數的消息創建隊列依次去執行。區別就是spin是個無限循環,只要隊列里消息在,程序就會立即執行回調函數。
而spinonce是根據程序所設的頻率,在while里依次調用spinonce,根據隊列里消息的前后順序,依次調用回調函數。
總結兩個關鍵詞(消息隊列與輪轉執行,回調函數)。
