Removed std::enable_shared_from_this
Minor ID manager refactoring
This commit is contained in:
@@ -2238,18 +2238,18 @@ std::string named_thread::get_name() const
|
||||
return fmt::format("('%s') Unnamed Thread", typeid(*this).name());
|
||||
}
|
||||
|
||||
void named_thread::start()
|
||||
void named_thread::start_thread(const std::shared_ptr<void>& _this)
|
||||
{
|
||||
// Get shared_ptr instance (will throw if called from the constructor or the object has been created incorrectly)
|
||||
auto&& ptr = shared_from_this();
|
||||
// Ensure it's not called from the constructor and the correct object is passed
|
||||
ENSURES(_this.get() == this);
|
||||
|
||||
// Run thread
|
||||
m_thread = thread_ctrl::spawn(get_name(), [thread = std::move(ptr)]()
|
||||
m_thread = thread_ctrl::spawn(get_name(), [this, _this]()
|
||||
{
|
||||
try
|
||||
{
|
||||
LOG_TRACE(GENERAL, "Thread started");
|
||||
thread->on_task();
|
||||
on_task();
|
||||
LOG_TRACE(GENERAL, "Thread ended");
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
@@ -2262,6 +2262,6 @@ void named_thread::start()
|
||||
LOG_NOTICE(GENERAL, "Thread aborted");
|
||||
}
|
||||
|
||||
thread->on_exit();
|
||||
on_exit();
|
||||
});
|
||||
}
|
||||
|
||||
+5
-5
@@ -312,7 +312,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class named_thread : public std::enable_shared_from_this<named_thread>
|
||||
class named_thread
|
||||
{
|
||||
// Pointer to managed resource (shared with actual thread)
|
||||
std::shared_ptr<thread_ctrl> m_thread;
|
||||
@@ -329,8 +329,8 @@ public:
|
||||
virtual std::string get_name() const;
|
||||
|
||||
protected:
|
||||
// Start thread (cannot be called from the constructor: should throw bad_weak_ptr in such case)
|
||||
void start();
|
||||
// Start thread (cannot be called from the constructor: should throw in such case)
|
||||
void start_thread(const std::shared_ptr<void>& _this);
|
||||
|
||||
// Thread task (called in the thread)
|
||||
virtual void on_task() = 0;
|
||||
@@ -340,9 +340,9 @@ protected:
|
||||
|
||||
public:
|
||||
// ID initialization
|
||||
virtual void on_init()
|
||||
virtual void on_init(const std::shared_ptr<void>& _this)
|
||||
{
|
||||
start();
|
||||
return start_thread(_this);
|
||||
}
|
||||
|
||||
// ID finalization
|
||||
|
||||
Reference in New Issue
Block a user