尝试在std :: thread中使用已删除的函数

时间:2016-07-21 20:32:08

标签: c++ multithreading class pointers

我的代码如下:

void internal_listener(TNReceiver *t){
    std::string oldVal = "";
    while (true) {
        void *holder = t+OFFSET;
        std::string val = *(std::string *)holder;
        if(val == oldVal){

        }else{
            time_t tine;
            std::cout << "[" << time(&tine) << "] : Logger msg recv: " << val;
        }
    }
}

TNReceiver::TNReceiver(int reg){
    this->REGISTER_ID = reg;
}

void TNReceiver::register_to_net(TNNet *net){
    net->add_transceiver(new TNData(this->REGISTER_ID, ""));
}

void TNReceiver::start_listen(){
    std::thread listen{this};
    listen.join();
}

我该如何解决这个问题?错误发生在std::thread listen{this}。我不想传递TNReceiver的“副本”。任何解决方案都会很棒!

1 个答案:

答案 0 :(得分:0)

如果您尝试复制构造线程,则会收到错误,因为复制构造函数已被删除。但是,你可以移动构造一个线程:

thread t1(f); 
thread t2 {std::move(t1)};   // move construct.  
t2.join(); 

Online demo

但是活动线程不再附加到初始对象。在你的代码中,这可能会带来一些问题,因为显然构造新线程的对象本身就是一个线程,这可能会破坏你的一些假设。

注意:您的意图并不完全清楚,因为您创建一个线程只是为了之后立即加入它。如果您添加有关您的意图的更多信息,TNReceiver发表评论,我会更新