diff --git a/Release/Scenario/test.sce b/Release/Scenario/test.sce
deleted file mode 100755
index 38c823e..0000000
--- a/Release/Scenario/test.sce
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Release/Scenario/test.xml b/Release/Scenario/test.xml
deleted file mode 100644
index c08e06f..0000000
--- a/Release/Scenario/test.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Release/Scenario/testGRD.xml b/Release/Scenario/testGRD.xml
new file mode 100755
index 0000000..aea91ed
--- /dev/null
+++ b/Release/Scenario/testGRD.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Release/XNEngine b/Release/XNEngine
index ee2be05..a5aef0e 100755
Binary files a/Release/XNEngine and b/Release/XNEngine differ
diff --git a/XNCore/XNFramework.cpp b/XNCore/XNFramework.cpp
index 1fd8676..fa7617d 100755
--- a/XNCore/XNFramework.cpp
+++ b/XNCore/XNFramework.cpp
@@ -21,13 +21,6 @@ XNFramework::XNFramework() : XNObject(new XNFrameworkPrivate())
d->modelManager = std::make_shared();
d->serviceManager = std::make_shared();
d->eventManager = std::make_shared();
- d->ddsManager->SetFramework(XN_THISPTR);
- d->timeManager->SetFramework(XN_THISPTR);
- d->threadManager->SetFramework(XN_THISPTR);
- d->scenarioManager->SetFramework(XN_THISPTR);
- d->modelManager->SetFramework(XN_THISPTR);
- d->serviceManager->SetFramework(XN_THISPTR);
- d->eventManager->SetFramework(XN_THISPTR);
}
XNFramework::XNFramework(PrivateType *p) : XNObject(p)
@@ -90,6 +83,13 @@ bool XNFramework::Initialize(uint32_t initialType)
{
T_D();
LOG_INFO("XNFramework Initialize ...");
+ d->ddsManager->SetFramework(XN_THISPTR);
+ d->timeManager->SetFramework(XN_THISPTR);
+ d->threadManager->SetFramework(XN_THISPTR);
+ d->scenarioManager->SetFramework(XN_THISPTR);
+ d->modelManager->SetFramework(XN_THISPTR);
+ d->serviceManager->SetFramework(XN_THISPTR);
+ d->eventManager->SetFramework(XN_THISPTR);
bool ret = d->eventManager->Initialize();
if (!ret) {
LOG_ERROR("XNFramework Initialize Failed!");
diff --git a/XNCore/XNThreadManager.cpp b/XNCore/XNThreadManager.cpp
index f06d093..0a3d3fa 100755
--- a/XNCore/XNThreadManager.cpp
+++ b/XNCore/XNThreadManager.cpp
@@ -177,6 +177,7 @@ uint32_t XNThreadManager::AddThreadPool(std::string name, double freq, uint32_t
// 创建线程对象
XNThreadPtr thread = std::make_shared(name, freq, priority, CPUAff);
thread->SetThreadID(AllocateThreadID());
+ thread->SetFramework(GetFramework());
LOG_INFO("Add Thread Success, Frequency: %1 Hz, Interval: %2 ns.", freq, 1.0e9 / freq);
d->threadList[thread->GetThreadID()] = thread;
return thread->GetThreadID();
diff --git a/XNEngine/XNEngine.cpp b/XNEngine/XNEngine.cpp
index 1189ff0..af3d93f 100755
--- a/XNEngine/XNEngine.cpp
+++ b/XNEngine/XNEngine.cpp
@@ -21,7 +21,7 @@
XNEngine::XNEngine()
{
// 创建框架对象
- framework = new XNFramework();
+ framework = std::make_shared();
// 引擎状态写入器
engineStatusWriter = nullptr;
// 测试模式
@@ -38,6 +38,9 @@ XNEngine::~XNEngine()
// 仿真控制监听器
void XNEngine::SimControlListener(const XNSim::XNSimControl::XNRuntimeControl &cmd)
{
+ if (!framework) {
+ return;
+ }
if (cmd.XNSimCmd() == 1) {
// 如果命令是暂停
framework->SimControl(0, SimControlCmd::Suspend);
@@ -72,10 +75,9 @@ bool XNEngine::SetLogLevel(const std::string &XmlPath)
return false;
}
// 获取根元素
- tinyxml2::XMLElement *root = doc.FirstChildElement("RuntimeEnvironment");
+ tinyxml2::XMLElement *root = doc.FirstChildElement("Scenario");
if (!root) {
- std::cerr << "0x1005 Failed to find RuntimeEnvironment element in configuration file!"
- << std::endl;
+ std::cerr << "0x1005 Failed to find Scenario element in configuration file!" << std::endl;
return false;
}
@@ -232,6 +234,9 @@ bool XNEngine::SetLogLevel(const std::string &XmlPath)
// 发布引擎状态
void XNEngine::PublishEngineStatus()
{
+ if (!framework) {
+ return;
+ }
// 如果引擎状态写入器存在
if (engineStatusWriter) {
// 创建引擎状态对象
@@ -334,6 +339,9 @@ void XNEngine::PublishEngineStatus()
// 运行引擎
bool XNEngine::Run(const std::string &XmlPath)
{
+ if (!framework) {
+ return false;
+ }
// 设置日志级别
bool isReady = SetLogLevel(XmlPath);
// 如果设置日志级别失败
diff --git a/XNEngine/XNEngine.h b/XNEngine/XNEngine.h
index 06f32a7..e026c7e 100755
--- a/XNEngine/XNEngine.h
+++ b/XNEngine/XNEngine.h
@@ -34,16 +34,6 @@ public:
void SimControlListener(const XNSim::XNSimControl::XNRuntimeControl &cmd);
public:
- /**
- * @brief 初始化成功槽函数
- * @param isSuccess 是否成功
- */
- void OnInitializeSuccess(bool isSuccess);
- /**
- * @brief 准备执行成功槽函数
- * @param isSuccess 是否成功
- */
- void OnPrepareforExecuteSuccess(bool isSuccess);
/**
* @brief 运行引擎
* @param XmlPath 场景XML路径
@@ -86,7 +76,7 @@ private:
/**
* @brief 主框架
*/
- XNFramework *framework;
+ XNFrameworkPtr framework;
/**
* @brief 主框架状态
*/
diff --git a/XNEngine/main.cpp b/XNEngine/main.cpp
index 2a3d100..35c2160 100755
--- a/XNEngine/main.cpp
+++ b/XNEngine/main.cpp
@@ -71,7 +71,7 @@ int main(int argc, char *argv[])
}
//检查是否同时包含-f和-id参数
- if (!hasConfigPath || !hasConfigId) {
+ if (hasConfigPath && hasConfigId) {
std::cerr
<< "0x1006 Please specify either -f or -id , but not both. "
"The engine will exit!"