メインページ   モジュール   名前空間一覧   クラス階層   アルファベット順一覧   構成   ファイル一覧   構成メンバ   ファイルメンバ   関連ページ    

TWaitCommand.cc

解説を見る。
00001 // =====================================================================
00002 //  $Id: TWaitCommand.cc,v 1.4 2004/03/07 10:30:28 goiwai Exp $
00003 //  $Name: CLDAQ-1-14-03 $
00004 //  $Log: TWaitCommand.cc,v $
00005 //  Revision 1.4  2004/03/07 10:30:28  goiwai
00006 //  ROOTに組みこむためのおまじないマクロを埋めこみました。
00007 //  全てにおいて完全に動作するわけではありません。
00008 //
00009 //  Revision 1.3  2003/11/27 07:35:07  goiwai
00010 //  *** empty log message ***
00011 //
00012 //  Revision 1.2  2003/11/25 19:13:10  goiwai
00013 //  *** empty log message ***
00014 //
00015 //  Revision 1.1  2003/11/25 13:41:59  goiwai
00016 //  まだ作りかけですが.
00017 //  手打ち入力だと動くんですけど,マクロとして実行すると,ずっとスリープします.
00018 //
00019 // =====================================================================
00020 #include "TWaitCommand.hh"
00021 #include "TRunManager.hh"
00022 #include "TRegularExpression.hh"
00023 
00024 static const Tstring _name = "/system/wait";
00025 static const Tstring _desc =
00026 "マネージャーのステータスがSleep a parent process."
00027 "\n"
00028 "Some thread processes go on."
00029 "\n"
00030 "This command can accept only one argument and must be digit."
00031 "\n"
00032 "CLDAQ> /system/wait 10";
00033 
00034 TWaitCommand::TWaitCommand( TRunManager* manager )
00035   : TCommand( manager, _name, _desc )
00036 {;}
00037 
00038 TWaitCommand::~TWaitCommand()
00039 {;}
00040 
00041 Tvoid TWaitCommand::Execute( const TstringList& arguments )
00042 {
00043   static TRegularExpression regex( "^[0-9]+$" );
00044 
00045   // まだ作りかけ
00046   // とりあえず, RunManagerがスタンバイになるまで待つ
00047   // 手動だとまともな動作するけど
00048   // /system/execute でやるとずっとsleep しっぱなしになる
00049   Tint sec = 1;
00050   if ( !arguments.empty() ) {
00051     Tstring strtime = arguments[ 0 ];
00052     if ( regex == strtime ) {
00053       sec = strtoi( strtime );
00054     }
00055   }
00056 
00057   // TODO: バッチモードで実行するとだめなのです
00058   // マクロで読ませてもこの瞬間は tStatusReady の出力
00059   //Tcout << __FILE__ << __LINE__ << " " << theRunManager -> GetStatus() << Tendl;
00060   // ただイベントループだけが進行しないので eventlimit はいつまでたっても
00061   // おわらない
00062   // timelimit はちゃんと終了してくれる
00063   // マクロでの実行が問題なんだね
00064   // 手ではちゃんと動作する
00065   // doEventLoop() に問題かな?
00066   // ちょっと EventManagerとRunManagerの挙動をさぐる必要あり
00067   while ( theRunManager -> GetStatus() != tStatusStandby ) {
00068     sleep( sec );
00069   }
00070 
00071   return;
00072 }
00073 
00074 #ifdef __CLDAQ_ROOT_DLL
00075     ClassImp(TWaitCommand)
00076 #endif


CLDAQ - a Class Library for DataAcQuisition (Version 1.14.3)
Go IWAI -- goiwai at users.sourceforge.jp