00001 // ===================================================================== 00002 // $Id: TSleepCommand.cc,v 1.8 2004/03/07 10:30:28 goiwai Exp $ 00003 // $Name: CLDAQ-1-14-03 $ 00004 // $Log: TSleepCommand.cc,v $ 00005 // Revision 1.8 2004/03/07 10:30:28 goiwai 00006 // ROOTに組みこむためのおまじないマクロを埋めこみました。 00007 // 全てにおいて完全に動作するわけではありません。 00008 // 00009 // Revision 1.7 2003/11/27 07:35:07 goiwai 00010 // *** empty log message *** 00011 // 00012 // Revision 1.6 2003/11/25 05:09:44 goiwai 00013 // Threadといっしょにスリープしてしまう問題に終止符. 00014 // 00015 // Revision 1.5 2003/10/06 17:02:37 goiwai 00016 // *** empty log message *** 00017 // 00018 // Revision 1.4 2003/08/25 10:42:21 goiwai 00019 // だめです.やっぱりスレッドも一緒に止まりますね.すみません. 00020 // あと, /system/execute もなんだかおかしいようです. 00021 // 近々,直します. 00022 // 00023 // Revision 1.3 2003/08/25 10:37:14 goiwai 00024 // sleepすると,スレッドも一緒にスリープしてしまうので,子プロセスを作って, 00025 // その中でsleepするようにしました.EventLoopは動き続けます. 00026 // これによって,なにが出来るかというと, 00027 // /run/start 00028 // /system/sleep 10 00029 // /run/suspend 00030 // /run/stop 00031 // といったマクロを食わせることによって,10秒のランを実行するはずです. 00032 // 00033 // Revision 1.2 2003/07/30 16:17:33 goiwai 00034 // ファイルにコミットログをつけることにしました. 00035 // 00036 // ===================================================================== 00037 #include "TSleepCommand.hh" 00038 #include "TRunManager.hh" 00039 #include "TRegularExpression.hh" 00040 00041 static const Tstring _name = "/system/sleep"; 00042 static const Tstring _desc = 00043 "Sleep a parent process." 00044 "\n" 00045 "Some thread processes go on." 00046 "\n" 00047 "This command can accept only one argument and must be digit." 00048 "\n" 00049 "CLDAQ> sleep 10"; 00050 00051 TSleepCommand::TSleepCommand( TRunManager* manager ) 00052 : TCommand( manager, _name, _desc ) 00053 {;} 00054 00055 TSleepCommand::~TSleepCommand() 00056 {;} 00057 00058 // TODO: バッチモードで実行するとだめなのです 00059 Tvoid TSleepCommand::Execute( const TstringList& arguments ) 00060 { 00061 static TRegularExpression regex( "^[0-9]+$" ); 00062 00063 if ( arguments.empty() ) { 00064 ShowCommandDetail(); 00065 } else { 00066 Tstring strtime = arguments[ 0 ]; 00067 if ( regex == strtime ) { 00068 sleep( strtoi( strtime ) ); 00069 } else { 00070 ShowCommandDetail(); 00071 } 00072 } 00073 00074 return; 00075 } 00076 00077 #ifdef __CLDAQ_ROOT_DLL 00078 ClassImp(TSleepCommand) 00079 #endif