c++ - 覆盖线程函数c++

标签 c++ multithreading

所以我有这个基类,它创建了一个在构造时调用虚拟方法的线程。之所以这样设计,是因为我只想让其他开发人员覆盖此方法,而不是同时覆盖构造函数和此方法。因此,当我继承此类时,我认为将要调用的方法是覆盖。它没有用。我的构造函数代码是下一个

IOHandler::IOHandler(int refresh_rate)
{
    alarm_is_set = false;
    terminate_threads = false;
    init_complete = false;
    update_cycle_thread = std::thread (& IOHandler::update_cycle,
                                                        this,
                                                refresh_rate);
}

但是当我创建一个子类 f.e.

class childClass: public IOHandler
{
      void update_cycle(int refresh_rate) override;
}

调用的函数是IOHandler::update_cycle,不是override,是否可以做我想做的事?问候

最佳答案

You should not call a virtual function from the constructor :该对象尚未完全构建,您的重写函数将无法从基础调用。这就是 std::thread 接收函数对象作为参数的原因。替代方法通常是在线程构造后调用 start() 方法。

关于c++ - 覆盖线程函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337374/

相关文章:

c - pthread_mutex_t 位于结构体内部并在访问时锁定该结构体

windows - 难道不能从线程 ID 获取句柄吗?

java - Java中如何实现线程安全的HashMap取值时延迟初始化?

c++ - 如何将一个范围内的更新索引锁定为最大值?

java - 在线程中断的情况下提取进程退出代码

c++ - 运营商评价

c++ - 引用类型变量的初始化和存储

c++ - 为什么 GCC 不使用 LOAD(无围栏)和 STORE+SFENCE 来实现顺序一致性?

c++ - C++中的浏览器帮助对象

c++ - 如何找到程序的 main(...) 函数?