# HG changeset patch # User John W. Eaton # Date 1365096441 14400 # Node ID fe4cd846c3e795db31bb4e2359c91bb691d41787 # Parent 5982d469f79bc21a9e1392751ea2573b58edff66 separate octave interpreter thread creation from execution * main-window.cc (main_window::construct): Call octave_qt_link::execute_interpreter after all signal connections are made. * libgui/src/module.mk (octave_gui_MOC): Remove src/moc-octave-main-thread.cc from the list. * octave-main-thread.h, octave-main-thread.cc (octave_main_thread::execute_interpreter): New function. Call start. (octave_main_thread::ready): Delete signal and all uses. * octave_qt_link.h, octave_qt_link.cc (octave_qt_link::octave_qt_link): Don't call start for _main_thread. (octave_qt_link::execute_interpreter): New function. diff --git a/libgui/src/main-window.cc b/libgui/src/main-window.cc --- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -1184,6 +1184,8 @@ _file_editor, SLOT (handle_delete_debugger_pointer_request (const QString&, int))); + _octave_qt_link->execute_interpreter (); + octave_link::connect_link (_octave_qt_link); octave_link::register_event_listener (_octave_qt_event_listener); diff --git a/libgui/src/module.mk b/libgui/src/module.mk --- a/libgui/src/module.mk +++ b/libgui/src/module.mk @@ -71,7 +71,6 @@ src/moc-files-dockwidget.cc \ src/moc-history-dockwidget.cc \ src/moc-main-window.cc \ - src/moc-octave-main-thread.cc \ src/moc-octave-qt-event-listener.cc \ src/moc-octave-qt-link.cc \ src/moc-settings-dialog.cc \ diff --git a/libgui/src/octave-main-thread.cc b/libgui/src/octave-main-thread.cc --- a/libgui/src/octave-main-thread.cc +++ b/libgui/src/octave-main-thread.cc @@ -1,5 +1,6 @@ /* +Copyright (C) 2013 John W. Eaton Copyright (C) 2011-2012 Jacob Dawid This file is part of Octave. @@ -35,20 +36,20 @@ #include "octave-main-thread.h" #include "octave-link.h" -octave_main_thread::octave_main_thread () : QThread () -{ -} - void -octave_main_thread::run () +octave_main_thread::run (void) { // Matlab uses "C" locale for LC_NUMERIC class regardless of local setting setlocale (LC_NUMERIC, "C"); - emit ready (); - octave_initialize_interpreter (octave_cmdline_argc, octave_cmdline_argv, octave_embedded); octave_execute_interpreter (); } + +void +octave_main_thread::execute_interpreter (void) +{ + start (); +} diff --git a/libgui/src/octave-main-thread.h b/libgui/src/octave-main-thread.h --- a/libgui/src/octave-main-thread.h +++ b/libgui/src/octave-main-thread.h @@ -1,5 +1,6 @@ /* +Copyright (C) 2013 John W. Eaton Copyright (C) 2011-2012 Jacob Dawid This file is part of Octave. @@ -32,19 +33,17 @@ */ class octave_main_thread : public QThread { - Q_OBJECT public: - /** Creates a new thread running octave_main. */ - octave_main_thread (); + // Create a new thread for running the octave interpreter. + octave_main_thread (void) : QThread () { } -signals: - /** This signal will be emitted when the thread is about to actually - * run octave_main. */ - void ready(); + // Start the thread and initialize and execute the octave + // interpreter. + void execute_interpreter (void); protected: - /** Runs octave_main. */ - void run (); + // Avoid exec. Run the octave interpreter in the new thread. + void run (void); }; #endif // OCTAVEMAINTHREAD_H diff --git a/libgui/src/octave-qt-link.cc b/libgui/src/octave-qt-link.cc --- a/libgui/src/octave-qt-link.cc +++ b/libgui/src/octave-qt-link.cc @@ -35,8 +35,12 @@ octave_qt_link::octave_qt_link (void) : octave_link (), main_thread (new octave_main_thread) { - // Start the first one. - main_thread->start (); +} + +void +octave_qt_link::execute_interpreter (void) +{ + main_thread->execute_interpreter (); } void diff --git a/libgui/src/octave-qt-link.h b/libgui/src/octave-qt-link.h --- a/libgui/src/octave-qt-link.h +++ b/libgui/src/octave-qt-link.h @@ -51,6 +51,8 @@ ~octave_qt_link (void) { } + void execute_interpreter (void); + void do_update_workspace (void); void do_set_history (const string_vector& hist);