2016-07-21 7 views
0

は私のコードは次のとおりです。試み::スレッド

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

スレッドを作成しようとすると、コピーコンストラクタが削除されるため、エラーが発生します。

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

Online demo

をしかし、その後、アクティブなスレッドは、もはや最初のオブジェクトに添付されています。ただし、スレッドを構築動かすことはできません。あなたのコードでは、これはいくつかの問題を引き起こす可能性があります。明らかに、新しいスレッドを構築しているオブジェクト自体がスレッドなので、あなたの前提のいくつかが壊れる可能性があります。

注:スレッドを作成してすぐ後で結合するという意図は完全には明確ではありません。あなたの意図についての情報を追加してTNReceiverにコメントを投稿し、私が更新する場合