我的代码如下:
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
的“副本”。任何解决方案都会很棒!
答案 0 :(得分:0)
如果您尝试复制构造线程,则会收到错误,因为复制构造函数已被删除。但是,你可以移动构造一个线程:
thread t1(f);
thread t2 {std::move(t1)}; // move construct.
t2.join();
但是活动线程不再附加到初始对象。在你的代码中,这可能会带来一些问题,因为显然构造新线程的对象本身就是一个线程,这可能会破坏你的一些假设。
注意:您的意图并不完全清楚,因为您创建一个线程只是为了之后立即加入它。如果您添加有关您的意图的更多信息,TNReceiver
发表评论,我会更新