69 lines
1.2 KiB
C++
69 lines
1.2 KiB
C++
#include "ModuleInstance.h"
|
|
|
|
#include <mutex>
|
|
#include <thread>
|
|
|
|
ModuleInstance::ModuleInstance(CoreInstance& core) : core_(core)
|
|
{
|
|
// Init instance
|
|
}
|
|
|
|
void ModuleInstance::start()
|
|
{
|
|
// Create thread
|
|
}
|
|
|
|
void ModuleInstance::stop()
|
|
{
|
|
onStop.Call();
|
|
}
|
|
|
|
|
|
extern ModuleInstance* Factory(CoreInstance&);
|
|
|
|
static std::mutex mModuleInstance;
|
|
static ModuleInstance* module = nullptr;
|
|
static std::thread* moduleThread;
|
|
|
|
void InitModule(CoreInstance& core)
|
|
{
|
|
mModuleInstance.lock();
|
|
if(module == nullptr)
|
|
module = Factory(core);
|
|
mModuleInstance.unlock();
|
|
}
|
|
|
|
void StartModule()
|
|
{
|
|
mModuleInstance.lock();
|
|
if (module != nullptr)
|
|
moduleThread = new std::thread([&] {module->start(); });
|
|
mModuleInstance.unlock();
|
|
}
|
|
|
|
void StopModule()
|
|
{
|
|
mModuleInstance.lock();
|
|
if(module != nullptr)
|
|
{
|
|
delete module;
|
|
module = nullptr;
|
|
moduleThread->detach();
|
|
delete moduleThread;
|
|
}
|
|
mModuleInstance.unlock();
|
|
}
|
|
|
|
void QuitModule()
|
|
{
|
|
mModuleInstance.lock();
|
|
if(module != nullptr)
|
|
{
|
|
module->stop();
|
|
moduleThread->join();
|
|
delete module;
|
|
module = nullptr;
|
|
}
|
|
mModuleInstance.unlock();
|
|
}
|