2016-07-21 4 views
0

Mein Code ist wie folgt:Versuch, eine gelöschte Funktion in std zu verwenden :: 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(); 
} 

Wie kann ich dieses Problem beheben? Der Fehler ist std::thread listen{this}. Ich möchte keine "Kopie" von TNReceiver weitergeben. Jede Lösung wäre großartig!

Antwort

0

Wenn Sie versuchen, einen Thread zu erstellen, erhalten Sie einen Fehler, weil der Kopierkonstruktor gelöscht wird. Sie können jedoch einen Thread bewegen konstruieren:

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

Online demo

Aber dann der aktive Thread nicht mehr dem ursprünglichen Objekt angebracht ist. In Ihrem Code könnte dies zu einigen Problemen führen, da das Objekt, das den neuen Thread erstellt, selbst ein Thread ist und dadurch möglicherweise einige Ihrer Annahmen verletzt werden.

Hinweis: Ihre Absicht ist nicht vollständig klar, da Sie einen Thread erstellen, um ihn unmittelbar danach zu verbinden. Wenn Sie weitere Informationen über Ihre Absicht hinzufügen und die TNReceiver einen Kommentar posten und ich werde

aktualisieren