尝试在std::thread中使用已删除的函数
Attempt to use a deleted function in std::thread
我的代码如下:
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
的"副本"。任何解决方案都很棒!
如果您试图复制构造线程,您将收到一个错误,因为复制构造函数已被删除。然而,您可以移动构造一个线程:
thread t1(f);
thread t2 {std::move(t1)}; // move construct.
t2.join();
在线演示
但是,活动线程不再附加到初始对象。在您的代码中,这可能会带来一些问题,因为显然构建新线程的对象本身就是一个线程,然后这可能会打破您的一些假设。
注意:您的意图并不完全清楚,因为您创建一个线程只是为了在之后立即加入它。如果你添加了更多关于你的意图的信息,TNReceiver
发布了一条评论,我会更新
相关文章:
- 为什么我的双向链表删除函数会删除多个节点?
- unique_ptr实现接口时对已删除函数的引用
- 可视代码 删除函数括号内的空格
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 试图引用已删除函数数组的相等运算符
- 双链表堆栈删除函数不起作用
- 是否需要删除函数中未使用的新结构?
- C++引用已删除函数错误
- 删除函数环境中C++输入 R 对象
- 删除函数中的对象C++
- 在 C++ 中使用删除函数的不同方式
- C++错误:C2280 - 引用已删除函数的编译器错误?
- C++,删除函数/迭代进程中定义的动态数组
- 删除函数 c++ 的读取访问冲突异常
- 如何对此自定义C 列表类实现删除函数
- 双向链表问题(特别是复制构造函数和删除函数)
- 引用 std::atomic <bool>的已删除函数错误
- 在删除函数自由度的指针后,为什么我会得到核心转储
- C++删除函数
- 返回 C++11 中已删除函数的类型