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!"