// Copyright (C) 2001 Jean-Marc Valin #include "GRunContext.h" #include #include "vflow_pref.h" #include #include "UserException.h" using namespace std; namespace FD { gboolean delete_window (GtkWidget *widget, GdkEvent *event, GRunContext *my_context) { gdk_threads_leave(); pthread_mutex_lock(&my_context->del_lock); if (my_context->net) { alarm(5); //stopping processing thread if (my_context->running_thread) { //cerr<<"Stopping processing thread"<net->stop(); //cerr << "joining thread\n"; } else { cerr << "On a un crisse de gros probleme\n"; } //cerr<<"Deleting network..."<net; } pthread_mutex_unlock(&my_context->del_lock); pthread_join(*my_context->running_thread, NULL); //cerr<<"Stopping GTK"<build("MAIN", params); if (net->getInputNode()) throw new GeneralException ("main network has input node", __FILE__, __LINE__); //cerr << "initializing...\n"; //verifyConnect done by UIDocument //net->verifyConnect(); //processing buffer requests for (int i = 0; ;i++) { if (!net->hasOutput(i)) break; ParameterSet req; net->request(i,req); } //initializing net->initialize(); //cerr << "running (UIDocument)...\n"; for (int i = 0; ;i++) { if (!net->hasOutput(i)) break; if (FlowPref::getBool("VFLOW", "PrintOutput")) { stringstream execOut; execOut << *net->getOutput(i,0); //cerr << "End of getOutput" << endl; gdk_threads_enter(); less_print(execOut.str()); gdk_threads_leave(); //cerr << "Printed" << endl; } else { net->getOutput(i,0); } } //cerr << "Deleting in run()" << endl; gdk_threads_enter(); less_print("Network ended normally"); gdk_threads_leave(); } catch (BaseException *e) { //cerr << "exception" << endl; stringstream excOut; e->print (excOut); gdk_threads_enter(); less_print(excOut.str()); gdk_threads_leave(); delete e; } catch (UserException *e) { cerr << "User stop caught" << endl; delete e; } catch (...) { gdk_threads_enter(); less_print("Unknown exception caught"); gdk_threads_leave(); } pthread_mutex_lock(&del_lock); if (net) { net->cleanupNotify(); delete net; net=NULL; } pthread_mutex_unlock(&del_lock); } }//namespace FD