Author: tross
Date: Tue Jun  9 12:53:21 2009
New Revision: 782981

URL: http://svn.apache.org/viewvc?rev=782981&view=rev
Log:
Added a signal handler to cleanly shut down on SIGINT.

Modified:
    qpid/trunk/qpid/cpp/examples/qmf-console/printevents.cpp

Modified: qpid/trunk/qpid/cpp/examples/qmf-console/printevents.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/qmf-console/printevents.cpp?rev=782981&r1=782980&r2=782981&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/qmf-console/printevents.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/qmf-console/printevents.cpp Tue Jun  9 
12:53:21 2009
@@ -22,6 +22,7 @@
 #include "qpid/console/ConsoleListener.h"
 #include "qpid/console/SessionManager.h"
 #include "qpid/sys/Time.h"
+#include <signal.h>
 
 using namespace std;
 using namespace qpid::console;
@@ -50,54 +51,73 @@
 //==============================================================
 // Main program
 //==============================================================
-int main_int(int /*argc*/, char** /*argv*/)
-{
-    //
-    // Declare an instance of our listener.
-    //
-    Listener listener;
-
-    //
-    // Declare connection settings for the messaging broker.  The settings 
default to
-    // localhost:5672 with user guest (password guest).  Refer to the header 
file
-    // <qpid/client/ConnectionSettings.h> for full details.
-    //
-    qpid::client::ConnectionSettings connSettings;
-
-    //
-    // Declare the (optional) session manager settings.  Disable the reception 
of
-    // object updates and heartbeats.  Note that by disabling the reception of 
things
-    // we don't need, we don't unnecessarily use network bandwidth.
-    //
-    SessionManager::Settings smSettings;
-    smSettings.rcvObjects = false;
-    smSettings.rcvHeartbeats = false;
-
-    //
-    // Declare the console session manager.
-    //
-    SessionManager sm(&listener, smSettings);
-
-    //
-    // Add a broker connection to the session manager.  If desired, multiple 
brokers may
-    // be connected.
-    //
-    Broker* broker = sm.addBroker(connSettings);
-
-    //
-    //  Sleep indefinitely while asynchronous events are handled by the 
listener.
-    //
-    for (;;)
-      qpid::sys::sleep(1);
+struct Main {
+    bool stopping;
+
+    Main() : stopping(false) {}
+
+    int run(int /*argc*/, char** /*argv*/)
+    {
+        //
+        // Declare an instance of our listener.
+        //
+        Listener listener;
+
+        //
+        // Declare connection settings for the messaging broker.  The settings 
default to
+        // localhost:5672 with user guest (password guest).  Refer to the 
header file
+        // <qpid/client/ConnectionSettings.h> for full details.
+        //
+        qpid::client::ConnectionSettings connSettings;
+
+        //
+        // Declare the (optional) session manager settings.  Disable the 
reception of
+        // object updates and heartbeats.  Note that by disabling the 
reception of things
+        // we don't need, we don't unnecessarily use network bandwidth.
+        //
+        SessionManager::Settings smSettings;
+        smSettings.rcvObjects = false;
+        smSettings.rcvHeartbeats = false;
+
+        //
+        // Declare the console session manager.
+        //
+        SessionManager sm(&listener, smSettings);
+
+        //
+        // Add a broker connection to the session manager.  If desired, 
multiple brokers may
+        // be connected.
+        //
+        Broker* broker = sm.addBroker(connSettings);
+
+        //
+        //  Sleep indefinitely while asynchronous events are handled by the 
listener.
+        //
+        while (!stopping)
+            qpid::sys::sleep(1);
+
+        sm.delBroker(broker);
+        return 0;
+    }
 
-    sm.delBroker(broker);
-    return 0;
+    void stop()
+    {
+        stopping = true;
+    }
+};
+
+Main main_program;
+
+void signal_handler(int)
+{
+    main_program.stop();
 }
 
 int main(int argc, char** argv)
 {
+    signal(SIGINT, signal_handler);
     try {
-        return main_int(argc, argv);
+        return main_program.run(argc, argv);
     } catch(std::exception& e) {
         cout << "Top Level Exception: " << e.what() << endl;
     }



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to