Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class A
- {
- public:
- A();
- virtual ~A();
- private:
- std::shared_ptr<ThreadClass1> tc1;
- }
- class ThreadClass1
- {
- public:
- ThreadClass1();
- virtual ~ThreadClass1();
- private:
- std::thread fThread;
- }
- class CGenericLogger
- {
- public:
- CGenericLogger();
- virtual ~CGenericLogger();
- public:
- class CPrefixContext
- {
- friend class CGenericLogger;
- public:
- CPrefixContext(CGenericLogger& parent, const TXString& prefix) : fParent(parent) { fParent.farrPrefix.push_back( prefix ); }
- virtual ~CPrefixContext() { fParent.farrPrefix.pop_back(); }
- protected:
- CGenericLogger& fParent;
- };
- private:
- std::mutex fFlushBarrier;
- TXStringSTLArray farrPrefix;
- };
- =============================
- A.cpp
- ********************************
- A::A()
- {
- tc1.reset(new ThreadClass1());
- }
- ********************************
- ============================
- ===============================
- ThreadClass1.cpp:
- ********************************
- std::shared_ptr<CGenericLogger> gLogger;
- CBynarySemaphore gThreadSemaphore;
- ThreadClass1::ThreadClass1()
- {
- gLogger.reset( new CGenericLogger() );
- fThread = std::thread(_DownloadThread);
- }
- ThreadClass1::~ThreadClass1()
- {
- gThreadSemaphore.notify();
- fThread.join();
- gLogger.reset();
- }
- static void _DownloadThread()
- {
- while(true)
- {
- gThreadSemaphore.wait();
- EThreadState state = EThreadState::Idle;
- NNA_SCOPE {
- std::lock_guard<std::mutex> block_threads_until_finish_this_job( gThreadDataBarier );
- state = gThreadData->fState;
- }
- if ( state == EThreadState::Stop )
- break;
- else if ( state == EThreadState::NewData )
- {
- auto myLogger = gLogger;
- CGenericLogger::CPrefixContext loggerContext( *myLogger, "Something " );
- //do something;
- }
- }
- }
- ********************************
- ===============================
- ======================================
- Main.cpp
- **************************************
- A1 = A();
- A2 = A(); // Application crashes at line 97 when A2 dilaog is closed.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement