class AppCoreUiThreadBase::Impl {
public:
- Impl(AppCoreUiThreadBase* parent) : parent_(parent) {}
+ Impl(AppCoreUiThreadBase* parent) : parent_(parent) {
+ context_ = g_main_context_new();
+ std::string context_str = std::to_string(
+ reinterpret_cast<unsigned long int>(context_));
+ setenv("TIZEN_GLIB_CONTEXT", context_str.c_str(), 1);
+ }
~Impl() {
if (thread_.joinable())
thread_.join();
+
+ if (context_ != nullptr) {
+ setenv("TIZEN_GLIB_CONTEXT", "0", 1);
+ g_main_context_unref(context_);
+ }
}
void Run(int argc, char** argv) {
- if (context_ != nullptr) {
+ if (running_) {
_E("Already running");
return;
}
- context_ = g_main_context_new();
- std::string context_str = std::to_string(
- reinterpret_cast<unsigned long int>(context_));
- setenv("TIZEN_GLIB_CONTEXT", context_str.c_str(), 1);
-
+ running_ = true;
thread_ = std::thread([&] {
pthread_setname_np(pthread_self(), "UIThread+");
parent_->OnLoopInit(argc, argv);
parent_->OnLoopRun();
+ running_ = false;
parent_->OnLoopFinish();
});
}
void Exit() {
+ if (!running_)
+ return;
+
parent_->OnLoopExit();
}
std::thread thread_;
GMainContext* context_ = nullptr;
tizen_base::SharedQueue<Runner> queue_;
+ bool running_ = false;
};
AppCoreUiThreadBase::AppCoreUiThreadBase() : impl_(new Impl(this)) {