exit(0);
}
+class ODEGMainLoop {
+public:
+ ODEGMainLoop() :
+ mainloop(g_main_loop_new(NULL, FALSE), g_main_loop_unref)
+ {
+ handle = std::thread(g_main_loop_run, mainloop.get());
+ }
+
+ ~ODEGMainLoop()
+ {
+ while (!g_main_loop_is_running(mainloop.get())) {
+ std::this_thread::yield();
+ }
+
+ g_main_loop_quit(mainloop.get());
+ handle.join();
+ }
+
+private:
+ std::unique_ptr<GMainLoop, void(*)(GMainLoop*)> mainloop;
+ std::thread handle;
+};
+
int main(int argc, char *argv[])
{
::signal(SIGINT, signalHandler);
::umask(0);
try {
- ScopedGMainLoop gmainloop;
+ ODEGMainLoop gmainloop;
ode::ServerContext server;
server.start();
} catch (std::exception &e) {