diff --git a/cd_utils/cdutils_core.cpp b/cd_utils/cdutils_core.cpp index 39fde3e..d1496a9 100644 --- a/cd_utils/cdutils_core.cpp +++ b/cd_utils/cdutils_core.cpp @@ -36,22 +36,27 @@ const uchar header_transfer = 0x81; __Core_Initializer__::__Core_Initializer__() { count_++; - //piCout << "try create Core" << count_; + piCout << "try create Core" << count_; if (count_ > 1) return; - //piCout << "create Core"; + piCout << "create Core"; __instance__ = new CDCore(); } __Core_Initializer__::~__Core_Initializer__() { count_--; - //piCout << "try delete Core" << count_; + piCout << "try delete Core" << count_; + if (count_ < 0) { + count_ = 0; + return; + } if (count_ > 0) return; - //piCout << "delete Core"; - if (__instance__ != 0) { + piCout << "delete Core ..."; + if (__instance__) { delete __instance__; __instance__ = 0; } + piCout << "delete Core ok"; } @@ -59,9 +64,7 @@ __Core_Initializer__::~__Core_Initializer__() { CDCore::CDCore() { setName("CDCore"); - sendt.setName("CDCore_send_thread"); - datatr.setName("CDCore_datatransfer"); - x_timer.setName("CDCore_X_timer"); + x_timer.setName("__S__.CDCore.x_timer"); datatr.setPacketSize(960); CONNECTU(&connection, dataReceivedEvent, this, dataReceived); CONNECTU(PICout::Notifier::object(), finished, this, piCoutFinished); @@ -78,9 +81,9 @@ CDCore::CDCore() { initRoot(&c_); initRoot(&m_); + CONNECTU(&sendt, started, this, sendThread) CONNECTU(&datatr, sendRequest, this, dtSendRequest) CONNECTU(&datatr, receiveFinished, this, dtReceiveFinished) - CONNECTU(&sendt, started, this, sendThread) CONNECTU(&x_timer, tickEvent, this, xTimerTick) /*k_[1] = KType(1, "123", "120+3", "comment"); @@ -96,16 +99,17 @@ CDCore::CDCore() { CDCore::~CDCore() { - piCout << "~CDCore"; + piCout << "~CDCore ..."; + x_timer.stop(false); + piCout << "~CDCore 1"; datatr.stop(); - piCout << "~datatr.stop()"; - x_timer.stop(); - piCout << "~x_timer.stop()"; - sendt.stop(true); - piCout << "~sendt.stop()"; -// sendt.waitForFinish(10); + piCout << "~CDCore 2"; + sendt.stop(); + piCout << "~CDCore 3"; + sendt.waitForFinish(10); + piCout << "~CDCore 4"; connection.stop(); - piCout << "~connection.stop()"; + piCout << "~CDCore ok"; } @@ -305,6 +309,17 @@ CDCore * CDCore::instance() { } +bool CDCore::destroy() { + if (!__Core_Initializer__::__instance__) return false; + piCout << "delete Core ..."; + delete __Core_Initializer__::__instance__; + piCout << "delete Core ok"; + __Core_Initializer__::__instance__ = 0; + __Core_Initializer__::count_ = 0; + return true; +} + + void CDUtils::CDCore::K_DirectChange(PIDeque path, PIString value) { piCoutObj << "K_DirectChange"; PacketKDirectChange p; diff --git a/cd_utils/cdutils_core.h b/cd_utils/cdutils_core.h index 7db457b..ab26bcb 100644 --- a/cd_utils/cdutils_core.h +++ b/cd_utils/cdutils_core.h @@ -30,6 +30,7 @@ class CDCore: public PIObject friend class XInterface; public: static CDCore * instance(); + static bool destroy(); EVENT(K_Sended) EVENT(K_SendFail) diff --git a/cd_utils/cdutilstest.cpp b/cd_utils/cdutilstest.cpp index 35603d4..ff35970 100644 --- a/cd_utils/cdutilstest.cpp +++ b/cd_utils/cdutilstest.cpp @@ -87,120 +87,11 @@ private: }; -#include "piscreen.h" -#include "piscreentiles.h" -PIScreen screen(false); int main(int argc, char *argv[]) { -// PIString s; -// s = "df a)))(a(ttt){a(b(c)})d)e( d dws ) sds(()fads(fdas()))fda))))fdasf((((jhvw"; -// piCout << s; -// piCout << s.inBrackets('(', ')'); -// piCout << s.cutLeft(s.find('(')).takeRange('(', ')'); -// piCout << s; -// piCout << "exit"; -// s = "test"; -// PIByteArray ba = s.toByteArray(); -// piCout << PIString(ba); -// piCout << PIString(ba.toHex()); -// piCout << PIString(ba.fromHex(PIString(ba.toHex()))); -// PIByteArray ba = s.toByteArray(); -// piCout << PIString(ba); -// piCout << PIString(ba.convertToBase64()); -// piCout << PIString(ba.convertFromBase64()); -// s = "dGVzdA=="; -// ba = s.toByteArray(); -// piCout << PIString(ba); -// piCout << PIString(ba.convertFromBase64()); -// return 0; -// int i = 0; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = ""; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = " "; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = " "; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = " s "; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = "f s "; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// s = " kjdfsnfv;kjsfd "; -// piCout << i++ << "!" << s << "!"; -// piCout << i << "!" << s.trimmed() << "!"; -// piCout << i << "!" << s.trim() << "!"; -// return 0; -// PIEthernet eth; -// eth.send("127.0.0.1:16102", PIByteArray("data\n", 5)); -// eth.send("127.0.0.1:26102", PIByteArray("data\n", 5)); -// eth.send("127.0.0.1:36102", PIByteArray("data\n", 5)); - /*PIString s; = "[k]\n\ - 1.f = 120+3 #s comment\n\ - 1.v = 123\n\ - 2.f = 2 #s comm\n\ - 2.v = 1\n\ - 4.f = -6/10 #s mment\n\ - 4.v = -0.6\n\ - [s.10.k]\n\ - 5.f = 2*2*2\n\ - 5.v = 8 #s 88\n\ - [s.10.s.50.k]\n\ - 100.f = 2*2*2\n\ - 100.v = 8 #s 88\n\ - [s.11.k]\n\ - 3.f = 1\n\ - 3.v = 1 #s 88 \n\ - 4.f = 0\n\ - 4.v = 0 #s 88 \n\ - 6.f = 0\n\ - 6.v = 0 #s 881 \n\ - []\n"; - PIIOString ios(&s); - CDUtils::K.read(&ios); - - s.clear(); - PIIOString iosw(&s); - CDUtils::K.write(&iosw); - piCout << s;*/ -// piCout << K.count(); -// PIFile rf("1.txt", PIIODevice::ReadWrite); -// K.read(&rf); - -// PIFile f; -// f.open("SH_base.h", PIIODevice::ReadOnly); -// CDUtils::K.update(&f); - -// PIFile wf("2.txt", PIIODevice::ReadWrite); -// CDUtils::K.write(&wf); - //PIIOString iosw(&s); - //piCout << s; - //piMSleep(1000); - //CDUtils::Core::instance()->test(); - //return 0; -// piCout << "init"; - screen.rootTile()->addTile(new TilePICout()); - screen.enableExitCapture('q'); -// piMSleep(3000); - screen.start(); - piCout << "start"; - Core core; - core.load(); -// core.save(); -// K.send(); - - - screen.waitForFinish(); + X.start(); + piSleep(1); + //CDCore::instance()->destroy(); + piCout << "DELETED"; return 0; }