Changeset 2825


Ignore:
Timestamp:
Aug 27, 2019 6:01:38 AM (3 months ago)
Author:
alexey
Message:

A seemingly stable solution is finally found for arbitrary switching to Manage Optima Runs from actively on-going LIVE UPDATE phase:

  • tested transition from all stages of data acqusition (beginning, reloading, updating, together with/without sysdata update)
  • all processes are properly finished (sysdata thread/timer, data retrieval/update timers)
  • tested from home machine (long DB interaction times) and from demeler3 (short DB interaction times)
  • tested on infinitely looped initial data retreival/ data update processes for selected runs; NEEDS testing on real-time experiments
Location:
trunk/programs
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/programs/us_com_project/us_com_project_gui.cpp

    r2817 r2825  
    2828
    2929
    30 //ALEXEY: reverted, based on v2802
    31 
    3230//// Constructor:  ACADEMIC: 'Data Acquision' / us_comproject_academic programs
    3331US_ComProjectMain::US_ComProjectMain(QString us_mode) : US_Widgets()
     
    345343   connect( epanObserv, SIGNAL( close_everything() ), this, SLOT( close_all() ));
    346344   connect( this, SIGNAL( reset_live_update() ),  epanObserv, SLOT( reset_live_update( )  ) );
     345   connect( epanObserv, SIGNAL( processes_stopped() ), this, SLOT( liveupdate_stopped() ));
    347346   
    348347   connect( epanPostProd, SIGNAL( switch_to_editing( QString &, QString &) ),  this, SLOT( switch_to_editing( QString &, QString & )  ) );
     
    387386          1. Avaiting for run to be launched ("Back to Managing Optima Runs") -- SET
    388387    2. More complex: Back to Managing runs from active LIVE_UPDATE stage -- stop all timers and other processes...
    389     */
     388    */
     389
    390390    qDebug() << "Jumping from LIVE UPDATE.";
    391    
     391
    392392    //2. Stop all timers/threads, reset GUI - when stopping fully working LIVE UPDATE
    393393    if ( !xpn_viewer_closed_soft )
    394       emit reset_live_update();
     394      {
     395        show_liveupdate_finishing_msg();
     396       
     397        epanObserv->sdiag->reset_liveupdate_panel_public();
     398        qApp->processEvents();
     399
     400        xpn_viewer_closed_soft = false;
     401        //epanInit  ->initAutoflowPanel();
     402
     403        return;
     404      }
    395405  }
    396406
     
    410420
    411421  //curr_panx = panx;         // Set new current panel
     422}
     423
     424
     425// Slot to define new exp. (from initial dialog)
     426void US_ComProjectMain::show_liveupdate_finishing_msg( void )
     427{
     428
     429   msg_liveupdate_finishing = new QMessageBox(this);
     430   msg_liveupdate_finishing->setIcon(QMessageBox::Information);
     431 
     432   msg_liveupdate_finishing->setWindowFlags ( Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowStaysOnTopHint);
     433   msg_liveupdate_finishing->setStandardButtons(0);
     434   msg_liveupdate_finishing->setWindowTitle(tr("Updating..."));
     435   msg_liveupdate_finishing->setText(tr( "Finishing LIVE UPDATE processes... Please wait...") );
     436   msg_liveupdate_finishing->setStyleSheet("background-color: #36454f; color : #D3D9DF;");
     437 
     438 
     439   int tab_width = this->tabWidget->tabBar()->width();
     440   int upper_height = this->gen_banner->height() + //this->welcome->height()
     441     + this->logWidget->height() + this->test_footer->height();
     442
     443   int pos_x = this->width()/2 - tab_width;
     444   int pos_y = this->height()/2 - upper_height;     
     445   msg_liveupdate_finishing->move(pos_x, pos_y);
     446 
     447   msg_liveupdate_finishing->show();
     448 
     449   qApp->processEvents();
     450
     451}
     452
     453void US_ComProjectMain::liveupdate_stopped( void  )
     454{
     455  //Close message on finishing LIVE_UPDATE processes...
     456  msg_liveupdate_finishing->accept();
     457 
     458  epanInit  ->initAutoflowPanel();
    412459}
    413460
     
    564611   msg_expsetup->setStandardButtons(0);
    565612   msg_expsetup->setWindowTitle(tr("Updating..."));
    566    msg_expsetup->setText(tr( "Setting up Experiment panel... Please wait...") );
     613   msg_expsetup->setText(tr( "Setting up EXPERIMENT panel... Please wait...") );
    567614   msg_expsetup->setStyleSheet("background-color: #36454f; color : #D3D9DF;");
    568615 
     
    16821729   //ALEXEY: close program, emitted from sdiag
    16831730   connect( sdiag, SIGNAL( close_program() ), this, SLOT( to_close_program()  ) );
     1731
     1732   connect( sdiag, SIGNAL( liveupdate_processes_stopped() ), this, SLOT( processes_stopped_passed()  ) );
    16841733   
    16851734   offset = 0;
     
    17231772}
    17241773
     1774void US_ObservGui::processes_stopped_passed( void )
     1775{
     1776  emit processes_stopped();
     1777}
     1778
    17251779void US_ObservGui::reset_live_update( void )
    17261780{
  • trunk/programs/us_com_project/us_com_project_gui.h

    r2817 r2825  
    3636#include "us_select_item.h"
    3737
    38 //ALEXEY: reverted, based on v2802
    39 
    4038class US_ComProjectMain;
    4139
     
    156154      void expsetup_msg_closed( void );
    157155     
     156     
    158157   signals:
    159158      void switch_to_live_update( QMap < QString, QString > & protocol_details );
     
    175174      ~US_ObservGui() {};
    176175
     176      US_XpnDataViewer*     sdiag;
     177
    177178 private:
    178179      US_ComProjectMain*    mainw;      // Parent to all panels
    179       US_XpnDataViewer*    sdiag;
     180      //US_XpnDataViewer*     sdiag;
    180181      int offset;
    181182
     
    189190      void to_close_program( void );
    190191      void reset_live_update( void );
     192      void processes_stopped_passed( void );
    191193 signals:
    192194      void to_xpn_viewer( QMap < QString, QString > & protocol_details );
     
    195197      void close_everything( void );
    196198      void reset_live_update_passed( void );
     199      void processes_stopped( void );
    197200};
    198201
     
    331334
    332335  QMessageBox * msg_expsetup;
     336  QMessageBox * msg_liveupdate_finishing;
     337 
    333338  QDialog *     diag_expsetup;
    334339 
     
    394399
    395400  void delete_psql_record( int );
    396   //void update_autoflow_data( void ); 
     401 
     402  void liveupdate_stopped( void );
     403
     404  void show_liveupdate_finishing_msg( void );
    397405 
    398406signals:
  • trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.cpp

    r2817 r2825  
    4646#endif
    4747
    48 //ALEXEY: reverted, based on v2802
    49 
    5048// DialBox
    5149DialBox::DialBox( QWidget *parent ):
     
    244242   currentDir   = "";
    245243   in_reload_auto    = false;
     244   finishing_live_update = false;
    246245   in_reload_all_data  = false;
    247246   in_reload_data_init = false;
    248247   in_reload_check_sysdata  = false;
    249 
     248   in_reload_end_processes  = false;
     249   
    250250   ElapsedTimeOffset = 0;
    251251
     
    11651165   //le_dbhost  ->setText( xpnhost + ":" + xpnport + "   (" + xpndesc + ")" );       //New
    11661166
     1167   //Also clear Wavelengths && Lambda ranges:
     1168   cb_pltrec ->disconnect();
     1169   cb_pltrec ->clear();
     1170   le_lrange ->setText("");
     1171   
     1172   
    11671173   pb_loadXpn ->setEnabled( true );
    11681174   pb_loadAUC ->setEnabled( true );
     
    12311237   le_remaining->setText("00:00:00");
    12321238   le_running  ->setText("00:00:00");
    1233    
     1239
    12341240   connect( cb_cellchn,   SIGNAL( currentIndexChanged( int ) ),
    1235             this,         SLOT  ( changeCellCh(            ) ) );
     1241          this,         SLOT  ( changeCellCh(            ) ) );
     1242
     1243   connect( cb_pltrec,    SIGNAL( currentIndexChanged( int ) ),
     1244            this,         SLOT  ( changeRecord( )            ) );
     1245
     1246
    12361247//   connect( plot, SIGNAL( zoomedCorners( QRectF ) ),
    12371248//            this, SLOT  ( currentRectf ( QRectF ) ) );
     
    12491260   le_status->setText( tr( "(no data loaded)" ) );
    12501261
     1262   runID           = "";
     1263   data_plot->setTitle( tr( "Intensity Data" ) );
    12511264}
    12521265
     
    15371550  if ( xpn_data->connect_data( dbhost, dbport, xpnname, xpnuser, xpnpasw ) )
    15381551    {
    1539       if ( dbg_level > 0 )
    1540   xpn_data->dump_tables();
     1552      // if ( dbg_level > 0 )
     1553      // xpn_data->dump_tables();
    15411554
    15421555      // Implement: query ExperiementRun and based on ExpID build array of RunIDs, find the bigger (the latest) and call it RunID_to_retrieve
     
    15831596      //msg_data_avail->close();
    15841597      //ok_msg_data->click();
     1598
     1599      //ALEXEY: make sure ExpID is coupled to the RunID which is already in the autoflow DB
     1600      if ( !runID_passed.isEmpty() || runID_passed != "NULL" )
     1601  {
     1602    if ( runID_passed.toInt() != RunID_to_retrieve.toInt() )
     1603      {
     1604        RunID_to_retrieve = runID_passed;
     1605        qDebug() << "Correcting RunID to : " << RunID_to_retrieve;
     1606      }
     1607  }
     1608 
    15851609     
    15861610      //ALEXEY: need to update 'autoflow' table with the unique RunID_to_retrieve && Start Run Time fields !!!
     
    16191643     
    16201644    // Check if all triple info is available
    1621       timer_all_data_avail = new QTimer;
     1645      //timer_all_data_avail = new QTimer;
    16221646      connect(timer_all_data_avail, SIGNAL(timeout()), this, SLOT( retrieve_xpn_raw_auto ( ) ));
    16231647      timer_all_data_avail->start(5000);     // 5 sec
     
    19431967
    19441968  qDebug() << "SYS_STAT: After replot(), BEFORE CheExpStat!! ";
    1945  
     1969
    19461970  int exp_status = CheckExpComplete_auto( RunID_to_retrieve  );
    19471971   
    1948   if ( exp_status == 5 || exp_status == 0 )
     1972  if ( exp_status == 55 || exp_status == 10 )
    19491973    {
    19501974      if ( exp_status == 0)
     
    19872011
    19882012        reset_auto();
     2013
     2014        in_reload_check_sysdata   = false;
     2015       
    19892016        emit experiment_complete_auto( details_at_live_update );
    19902017       
     
    20802107void US_XpnDataViewer::check_for_data( QMap < QString, QString > & protocol_details)
    20812108{
     2109  //Also reset the panel before reattachement
     2110  //reset_auto();
     2111 
    20822112  xpn_data->setEtimOffZero(); //ALEXEY: intialize etimoff to zero for the first time
    20832113
     
    21032133
    21042134  selectOptimaByName_auto( OptimaName );                         //New 
    2105  
     2135
     2136  //ALEXEY: just define all QTimers here for later safe stopping
     2137  timer_all_data_avail = new QTimer;
     2138  timer_data_reload = new QTimer;
     2139  timer_end_processes = new QTimer;
     2140
     2141
    21062142  timer_data_init = new QTimer;
    21072143  connect(timer_data_init, SIGNAL(timeout()), this, SLOT( load_xpn_raw_auto( ) ));
     
    21442180}
    21452181
     2182
     2183// Reset LIVE UPDATE panel && stop timers && quit threads
     2184void US_XpnDataViewer::reset_liveupdate_panel_public ( void )
     2185{
     2186  finishing_live_update = true;
     2187  reset_liveupdate_panel();
     2188}
     2189
     2190
    21462191// Reset LIVE UPDATE panel && stop timers && quit threads
    21472192void US_XpnDataViewer::reset_liveupdate_panel ( void )
     
    21592204      timer_check_sysdata->stop();
    21602205      disconnect(timer_check_sysdata, SIGNAL(timeout()), 0, 0);
     2206
     2207      qDebug() << "Stopping timer_check_sysdata";
    21612208    }
    21622209 
     
    21662213      timer_all_data_avail->stop();
    21672214      disconnect(timer_all_data_avail, SIGNAL(timeout()), 0, 0);
     2215
     2216       qDebug() << "Stopping timer_all_data_avail";
    21682217    }
    21692218 
     
    21722221      timer_data_reload->stop();
    21732222      disconnect(timer_data_reload, SIGNAL(timeout()), 0, 0);
     2223
     2224      qDebug() << "Stopping timer_data_reload";
    21742225    }
    21752226
     
    21782229      timer_data_init->stop();
    21792230      disconnect(timer_data_init, SIGNAL(timeout()), 0, 0);
     2231
     2232      qDebug() << "Stopping timer_data_init";
    21802233    }
    21812234
     
    21982251    qDebug() << "QTimer timer_data_reload STOPPED by clickig Manage Optima runs !!! ";
    21992252  /*************************************/
     2253
     2254  qDebug() << "BEFORE: " << in_reload_auto << ", " << in_reload_all_data << ", " << in_reload_data_init << ", " << in_reload_check_sysdata;
    22002255 
    2201   reset_auto();
    2202 
    2203   qDebug() << in_reload_auto << ", " << in_reload_all_data << ", " << in_reload_data_init << ", " << in_reload_check_sysdata;
    2204  
    2205   in_reload_auto    = false;
    2206   in_reload_all_data  = false;
    2207   in_reload_data_init = false;
    2208   in_reload_check_sysdata  = false;
     2256  //ALEXEY: should wait for execution of all below variables to be false (end of all timer functions) BEFORE reset_all();
     2257  // Introduce QTimer which checks for all abpve vartibales to be false (check all related functions to always reset them to false on completion)
     2258  // Put reset_auto() into the timer && and stop/disconnect timer from within connected SLOT.
     2259  //timer_end_processes = new QTimer;
     2260  connect(timer_end_processes, SIGNAL(timeout()), this, SLOT( end_processes ( ) ));
     2261  timer_end_processes->start(1000);     // 5 sec
    22092262 
    22102263  qApp->processEvents();
     2264}
     2265
     2266//to end all existing update processes
     2267void US_XpnDataViewer::end_processes( void )
     2268{
     2269  qDebug() << "In the END process: in_reload_end_processes = " << in_reload_end_processes;
     2270 
     2271  if ( in_reload_end_processes )            // If already doing a reload,
     2272    return;                              //  skip starting a new one
     2273 
     2274  in_reload_end_processes   = true;          // Flag in the midst of a reload
     2275 
     2276  qDebug() << "Checking if processes STOPPED.";
     2277  qDebug() << "MIDDLE: " << in_reload_auto << ", " << in_reload_all_data << ", " << in_reload_data_init << ", " << in_reload_check_sysdata;
     2278     
     2279  if (  !in_reload_auto && !in_reload_all_data &&  !in_reload_data_init && !in_reload_check_sysdata )
     2280    {
     2281     
     2282      timer_end_processes->stop();
     2283      disconnect(timer_end_processes, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
     2284
     2285      //ALEXEY: may not be needed
     2286      qDebug() << "LIVE UPDATE panel has been reset!";
     2287      qDebug() << "AFTER: " << in_reload_auto << ", " << in_reload_all_data << ", " << in_reload_data_init << ", " << in_reload_check_sysdata;
     2288     
     2289      reset_auto();
     2290      qApp->processEvents();
     2291     
     2292      in_reload_end_processes = false;
     2293
     2294      emit liveupdate_processes_stopped();
     2295       
     2296      //in_reload_end_processes   = false;
     2297    }
     2298  else
     2299    {
     2300      in_reload_end_processes   = false;
     2301      qApp->processEvents();
     2302    }
    22112303}
    22122304
     
    25002592
    25012593   //ALEXEY: Add Exp. Abortion Exception HERE...
    2502    if ( CheckExpComplete_auto( RunID_to_retrieve ) == 0 ) //ALEXEY should be == 3 as per documentation
     2594   if ( CheckExpComplete_auto( RunID_to_retrieve ) == 10 ) //ALEXEY should be == 3 as per documentation
    25032595     {
    25042596       qDebug() << "ABORTION IN EARLY STAGE...";
     
    25152607
    25162608     reset_auto();
     2609     
     2610     in_reload_all_data   = false; 
     2611     
    25172612     emit experiment_complete_auto( details_at_live_update  );
    25182613     return;
    25192614   }
    25202615     }
    2521    
    2522    // //ALEXEY: Add Exp. Abortion Exception HERE...
    2523    // if ( CheckExpComplete_auto( RunID_to_retrieve ) == 0 ) //ALEXEY should be == 3 as per documentation
    2524    //   {
    2525    //     experimentAborted  = true;
    2526        
    2527    //     timer_all_data_avail->stop();
    2528    //     disconnect(timer_all_data_avail, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
    2529        
    2530    //     if ( !timer_check_sysdata->isActive()  ) // Check if sys_data Timer is stopped
    2531    //    {
    2532    //      // Ask if data retrived so far should be saved:
    2533      
    2534    //      QMessageBox msgBox;
    2535    //      msgBox.setText(tr("Experiment was aborted!"));
    2536    //      msgBox.setInformativeText("The data retrieved so far can be saved or disregarded. If saved, the program will proceed to the next stage (Editing). Otherwise, it will return to the initial stage (Experiment), all data will be lost.");
    2537    //      msgBox.setWindowTitle(tr("Experiment Abortion"));
    2538    //      QPushButton *Save      = msgBox.addButton(tr("Save Data"), QMessageBox::YesRole);
    2539    //      QPushButton *Ignore    = msgBox.addButton(tr("Ignore Data"), QMessageBox::RejectRole);
    2540      
    2541    //      msgBox.setIcon(QMessageBox::Question);
    2542    //      msgBox.exec();
    2543      
    2544    //      if (msgBox.clickedButton() == Save)
    2545    //        {
    2546    //          export_auc_auto();
    2547          
    2548    //          QString mtitle_complete  = tr( "Complete!" );
    2549    //          QString message_done     = tr( "Experiment was completed. Optima data saved..." );
    2550    //          QMessageBox::information( this, mtitle_complete, message_done );
    2551          
    2552    //          updateautoflow_record_atLiveUpdate();
    2553    //          emit experiment_complete_auto( currentDir, ProtocolName, invID_passed, correctRadii  );  // Updtade later: what should be passed with signal ??
    2554    //          return;
    2555    //        }
    2556      
    2557    //      else if (msgBox.clickedButton() == Ignore)
    2558    //        {
    2559    //          reset();
    2560    //          delete_autoflow_record();
    2561    //          emit return_to_experiment( ProtocolName  );
    2562    //          return;
    2563    //        }
    2564    //    }
    2565    //   }     
    2566    
     2616 
    25672617   
    25682618   
     
    25722622       timer_all_data_avail->stop();
    25732623       disconnect(timer_all_data_avail, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
     2624
     2625       in_reload_all_data   = false; 
    25742626       
    25752627       // Auto-update hereafter
    2576        timer_data_reload = new QTimer;
    2577        connect(timer_data_reload, SIGNAL(timeout()), this, SLOT( reloadData_auto( ) ));
    2578        timer_data_reload->start(10000);     // 5 sec
    2579 
    2580        in_reload_all_data   = false; 
     2628       //timer_data_reload = new QTimer;
     2629
     2630       if ( !finishing_live_update )
     2631   {
     2632     connect(timer_data_reload, SIGNAL(timeout()), this, SLOT( reloadData_auto( ) ));
     2633     timer_data_reload->start(10000);     // 5 sec
     2634   }
    25812635     }
    25822636
     
    30823136   compute_ranges();
    30833137
    3084 //DbgLv(1) << "PltA: kpoint" << kpoint << "datsize" << curr_adata.size();
    3085 DbgLv(1) << "PltA: kpoint" << kpoint << "trpxs" << trpxs
    3086  << "nscan" << nscan << allData[trpxs].scanCount();
     3138   //   DbgLv(1) << "PltA: kpoint" << kpoint << "datsize" << curr_adata.size();
     3139   DbgLv(1) << "PltA: kpoint" << kpoint << "trpxs" << trpxs;
     3140// << "nscan" << nscan << allData[trpxs].scanCount();
    30873141   // Build the X,Y vectors
    30883142   QVector< double > rvec( kpoint );
     
    39083962      int statusExp = CheckExpComplete_auto( RunID_to_retrieve  );
    39093963
    3910       if ( statusExp == 5 || statusExp == 0 )
     3964      if ( statusExp == 55 || statusExp == 10 )
    39113965  {
    39123966    if ( statusExp == 0 )
     
    39303984
    39313985        updateautoflow_record_atLiveUpdate();
     3986
    39323987        reset_auto();
    3933        
     3988
     3989        in_reload_auto   = false;
     3990               
    39343991        //emit experiment_complete_auto( currentDir, ProtocolName, invID_passed, correctRadii  );  // Updtade later: what should be passed with signal ??
    39353992        emit experiment_complete_auto( details_at_live_update );
     
    39403997
    39413998     
    3942       // /** Experiment Aborted ***/
    3943      
    3944       // if ( statusExp == 0 ) //ALEXEY should be == 3 as per documentation
    3945       //  {
    3946       //    experimentAborted  = true;
    3947 
    3948       //    timer_data_reload->stop();
    3949       //    disconnect(timer_data_reload, SIGNAL(timeout()), 0, 0);   //Disconnect timer from anything
    3950 
    3951       //    if ( !timer_check_sysdata->isActive()  ) // Check if sys_data Timer is stopped
    3952       //      {
    3953       //        // Ask if data retrived so far should be saved:
    3954        
    3955       //        QMessageBox msgBox;
    3956       //        msgBox.setText(tr("Experiment was aborted!"));
    3957       //        msgBox.setInformativeText("The data retrieved so far can be saved or disregarded. If saved, the program will proceed to the next stage (Editing). Otherwise, it will return to the initial stage (Experiment), all data will be lost.");
    3958       //        msgBox.setWindowTitle(tr("Experiment Abortion"));
    3959       //        QPushButton *Save      = msgBox.addButton(tr("Save Data"), QMessageBox::YesRole);
    3960       //        QPushButton *Ignore    = msgBox.addButton(tr("Ignore Data"), QMessageBox::RejectRole);
    3961        
    3962       //        msgBox.setIcon(QMessageBox::Question);
    3963       //        msgBox.exec();
    3964        
    3965       //        if (msgBox.clickedButton() == Save)
    3966       //    {
    3967       //      export_auc_auto();
    3968 
    3969       //      QString mtitle_complete  = tr( "Complete!" );
    3970       //      QString message_done     = tr( "Experiment was completed. Optima data saved..." );
    3971       //      QMessageBox::information( this, mtitle_complete, message_done );
    3972 
    3973       //      updateautoflow_record_atLiveUpdate();
    3974       //      emit experiment_complete_auto( currentDir, ProtocolName, invID_passed, correctRadii );  // Updtade later: what should be passed with signal ??
    3975       //      return;
    3976       //    }
    3977        
    3978       //        else if (msgBox.clickedButton() == Ignore)
    3979       //    {
    3980       //      reset();
    3981       //      delete_autoflow_record();
    3982       //      emit return_to_experiment( ProtocolName  );
    3983       //      return;
    3984       //    }
    3985       //      }
    3986       //  }     
    3987      
    3988      
     3999   
    39894000       in_reload_auto   = false;         // Flag no longer in the midst of reload
     4001       
     4002       qDebug() << "Exit from reloaData with no change!";
     4003       
    39904004       return;     // Return with no change in AUC data
    39914005   }
     
    40154029   // Do resets and re-plot the current triple
    40164030   changeCellCh();
     4031
    40174032   in_reload_auto   = false;         // Flag no longer in the midst of reload
     4033   
     4034   qDebug() << "Exit from reloaData with SOME change!";
    40184035}
    40194036
  • trunk/programs/us_xpn_viewer/us_xpn_viewer_gui.h

    r2817 r2825  
    2525#include "us_xpn_run_auc.h"
    2626
    27 
    28 //ALEXEY: reverted, based on v2802
    2927
    3028class SpeedoMeter: public QwtDial
     
    9896     US_XpnDataViewer(QString auto_mode);
    9997
     98     void   reset_liveupdate_panel_public ( void );
     99     
    100100  private:
    101101     bool auto_mode_bool;
     
    251251     bool           haveTmst;
    252252     bool           in_reload;
     253
    253254     bool           in_reload_auto;
     255     bool           finishing_live_update;
    254256     
    255257     bool           in_reload_data_init;
    256258     bool           in_reload_all_data;
    257259     bool           in_reload_check_sysdata;
     260     bool           in_reload_end_processes;
    258261
    259262     
     
    269272     QTimer*        timer_all_data_avail;
    270273     QTimer*        timer_check_sysdata;
     274
     275     QTimer*        timer_end_processes;
    271276
    272277     QElapsedTimer*  elapsed_timer;
     
    311316     //void   retrieve_xpn_raw_auto ( QString & );
    312317     void   retrieve_xpn_raw_auto ( void );
     318     void   end_processes ( void );
    313319     void   reloadData_auto     ( void );
    314320     int    CheckExpComplete_auto( QString & );
     
    368374     void return_to_experiment( QString & );
    369375     void close_program( void );
     376     void liveupdate_processes_stopped( void );
    370377};
    371378#endif
Note: See TracChangeset for help on using the changeset viewer.