Fixed rtabmapviz exit without hard kill

This commit is contained in:
matlabbe
2016-03-17 16:36:44 -04:00
parent 9096c3d1d0
commit 9c2e87ea38
3 changed files with 11 additions and 14 deletions
+11 -2
View File
@@ -33,9 +33,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <rtabmap/utilite/ULogger.h> #include <rtabmap/utilite/ULogger.h>
#include <signal.h> #include <signal.h>
QApplication * app = 0;
void my_handler(int s){ void my_handler(int s){
ROS_INFO("rtabmapviz: ctrl-c catched! Exiting Qt app..."); ROS_INFO("rtabmapviz: ctrl-c catched! Exiting Qt app...");
QApplication::exit(); if(app)
{
QMetaObject::invokeMethod(app, "quit");
}
} }
int main(int argc, char** argv) int main(int argc, char** argv)
@@ -47,6 +52,9 @@ int main(int argc, char** argv)
ros::init(argc, argv, "rtabmapviz"); ros::init(argc, argv, "rtabmapviz");
app = new QApplication(argc, argv);
app->connect( app, SIGNAL( lastWindowClosed() ), app, SLOT( quit() ) );
GuiWrapper gui(argc, argv); GuiWrapper gui(argc, argv);
// Catch ctrl-c to close the gui // Catch ctrl-c to close the gui
@@ -63,10 +71,11 @@ int main(int argc, char** argv)
ROS_INFO("rtabmapviz started."); ROS_INFO("rtabmapviz started.");
// Now wait for application to finish // Now wait for application to finish
int r = gui.exec();// MUST be called by the Main Thread int r = app->exec();// MUST be called by the Main Thread
spinner.stop(); spinner.stop();
delete app;
ROS_INFO("rtabmapviz: All done! Closing..."); ROS_INFO("rtabmapviz: All done! Closing...");
return r; return r;
} }
-9
View File
@@ -68,7 +68,6 @@ float max3( const float& a, const float& b, const float& c)
} }
GuiWrapper::GuiWrapper(int & argc, char** argv) : GuiWrapper::GuiWrapper(int & argc, char** argv) :
app_(0),
mainWindow_(0), mainWindow_(0),
frameId_("base_link"), frameId_("base_link"),
waitForTransform_(true), waitForTransform_(true),
@@ -85,7 +84,6 @@ GuiWrapper::GuiWrapper(int & argc, char** argv) :
depthOdomInfo2Sync_(0) depthOdomInfo2Sync_(0)
{ {
ros::NodeHandle nh; ros::NodeHandle nh;
app_ = new QApplication(argc, argv);
QString configFile = QDir::homePath()+"/.ros/rtabmapGUI.ini"; QString configFile = QDir::homePath()+"/.ros/rtabmapGUI.ini";
for(int i=1; i<argc; ++i) for(int i=1; i<argc; ++i)
@@ -111,7 +109,6 @@ GuiWrapper::GuiWrapper(int & argc, char** argv) :
bool paused = false; bool paused = false;
nh.param("is_rtabmap_paused", paused, paused); nh.param("is_rtabmap_paused", paused, paused);
mainWindow_->setMonitoringState(paused); mainWindow_->setMonitoringState(paused);
app_->connect( app_, SIGNAL( lastWindowClosed() ), app_, SLOT( quit() ) );
ros::NodeHandle pnh("~"); ros::NodeHandle pnh("~");
@@ -249,12 +246,6 @@ GuiWrapper::~GuiWrapper()
delete infoMapSync_; delete infoMapSync_;
delete mainWindow_; delete mainWindow_;
delete app_;
}
int GuiWrapper::exec()
{
return app_->exec();
} }
void GuiWrapper::infoMapCallback( void GuiWrapper::infoMapCallback(
-3
View File
@@ -68,8 +68,6 @@ public:
GuiWrapper(int & argc, char** argv); GuiWrapper(int & argc, char** argv);
virtual ~GuiWrapper(); virtual ~GuiWrapper();
int exec();
protected: protected:
virtual void handleEvent(UEvent * anEvent); virtual void handleEvent(UEvent * anEvent);
@@ -263,7 +261,6 @@ private:
rtabmap::Transform getTransform(const std::string & fromFrameId, const std::string & toFrameId, const ros::Time & stamp) const; rtabmap::Transform getTransform(const std::string & fromFrameId, const std::string & toFrameId, const ros::Time & stamp) const;
private: private:
QApplication * app_;
rtabmap::MainWindow * mainWindow_; rtabmap::MainWindow * mainWindow_;
std::string cameraNodeName_; std::string cameraNodeName_;
double lastOdomInfoUpdateTime_; double lastOdomInfoUpdateTime_;