write by Jack in hubei 2019.7.25 17:00
这是一个singlton类,它控制命令操作和用户界面。用户不能调用该类的构造函数
(1)public:
static G4UImanager * GetUIpointer();
static G4UImanager * GetMasterUIpointer();
一个静态方法,用于获取指向该类唯一现有对象的指针。在exampleB1.cc中调用的函数有
// Get the pointer to the User Interface manager
G4UImanager* UImanager = G4UImanager::GetUIpointer();
G4UImanager.hh 中包含类 class G4UIcommand; class G4UIsession;的声明,因此可以直接定义相关类,现抽取一个main()函数中的相关代码:
//000ooo000ooo000oooo0000oooo000ooo0000oooo0000ooo000ooo
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
int main(int argc,char** argv)
{
// 获取指向 UI manager 的指针
G4UImanager* UI = G4UImanager::GetUIpointer();
if(argc==1)
// 定义交互式(G)UI 终端
{
G4UIsession * session = new G4UIterminal;
UI->ApplyCommand("/control/execute prerun.g4mac");
session->sessionStart();
delete session;
}
else
// 批处理模式
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UI->ApplyCommand(command+fileName);
}
//000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo
2 G4int ApplyCommand(const char * aCommand);
G4int ApplyCommand(const G4String& aCommand);
使用别名变量多次执行宏文件,该变量接受候选列表中的值。方法参数给出的命令(和参数)将被应用。如果命令成功执行,则返回零。如果不能执行该命令,将返回正的非零值。这个非零值的含义如下别名变量多次执行宏文件,该变量接受候选列表中的值。
这是所有(G)UI会话的基类,应该调用SessionStart()方法来启动会话,该类中的常见方法有
(1) virtual G4UIsession * SessionStart();
这个方法将会被main()函数调用,也可以被其他会话调用
这个类继承于G4UIsession,这是使用字符终端sesion的类,用法:
G4UIsession* terminalSession = new G4UIterminal;
or G4UIsession* terminalSession = new G4UIterminal(new your-shell);
实例化字符终端会话“terminalSession”。默认情况下,G4cout流被重定向到构造的实例
terminalSession-> SessionStart(); // "terminalSession" is started.终端回话开始
delete terminalSession; // "terminalSession" is deleted.终端回话结束
这个类帮助根据您的环境变量(如G4UI_USE_XXX)自动实例化用户会话,在mian()函数中的用法
...
// #include "G4UIExecutive.hh"
//
// int main(int argc, char** argv)
// {
// ...
// G4UIExecutive* myapp = new G4UIExecutive(argc, argv);
// if (session->IsGUI())
// myapp-> SessionStart();
// ...
// delete myapp;
(1) 内置布尔函数 inline G4bool G4UIExecutive::IsGUI() const
{
return isGUI;
}
(2)枚举类函数 enum SessionType { kNone, kQt, kXm, kWin32, kWt, kGag, kTcsh, kCsh };
main函数具有3种形参形式:
int main(int argc, char* argv[]);
int main(int argc, char** argv); //前两个等价
int main(int argc,char* argv[], char** env);
①argc和argv参数应用在命令行编译程序中
②int argc:int型,argument count-传入main函数的参数个数
③char** agrv:字符串数组,argument vector-存放指向字符串参数的指针数组;每一个元素指向一个函数参数;共argc个元素argv[0]为编译后产生的exe路径…\xxx.exe;argv[1]为程序执行的第一个字符串参数;argv[2]为第二个字符串参数;argv[3]为第三个字符串参数;argv[argc]为字符串的null空字符
④char**env:字符串数组。env[]的每一个元素都包含ENVVAR=value形式的字符串,其中ENVVAR为环境变量,value为其对应的值
//000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo
int argc, char **argv 用于运行时,把命令行参数传入主程序。
argc -- 命令行参数 总个数,包括 可执行程序名。
argv[i] -- 第 i 个参数。
argv[0] -- 可执行程序名。
例如运行:
abc.exe
argc 等于 1, argv[0] 是 "abc.exe"
例如运行:
rec.exe 4 5.2
argc 等于 3, argv[0] 是 "rec.exe", argv[1] 是 "4", argv[2] 是 "5.2".
主函数里若有:
int x;
float y;
char s[80];
strcpy(s,argv[0]); // 程序名存入 了 s strcpy 字符串复制函数
sscanf(argv[1],"%d",&x); // x 得到数值4
sscanf(argv[2],"%f",&y); // y 得到数值 5.2
//000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo000ooo
第三次的分析暂且讨论到这一步,结合不完全指南4可以更好的理解intercoms (用户接口管理类)