2016-08-18 4 views
0

Я хочу, чтобы запустить поток, который делает что-то так просто, как это:нагрузочного работает нить с ++ станд :: нить

main(){ 
    std::thread thread_pulse([=]{ 
     *this->do_adress = true; 
     std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); 
     *this->do_adress = false; 
     //delete this thread to avoid memory leaks 
    }); 
    //do some other stuff without waiting for the thread to terminate 
} 

как я уверяю, что, когда выполнение потока осуществляется поток удален, и есть нет утечки памяти, не дожидаясь завершения потока на главном?

EDIT:

спасибо за помощь, ти с помощью этого работал как я хотел

main(){ 
    std::thread ([=]{ 
     *this->do_adress = true; 
     std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); 
     *this->do_adress = false; 
     //delete this thread to avoid memory leaks 
    }).detach; 
    //do some other stuff without waiting for the thread to terminate 
} 
+0

'std :: thread thread_pulse (...); thread_pulse.detach(); ' –

ответ

4

Если вы хотите, чтобы убедиться, что нить сделать, прежде чем выйти main то прямо перед возвращением из main использовать

thread_pulse.join(); 

Это будет ждать thread_pulse закончить, прежде чем продолжить.

Если вы не заботитесь, если поток завершается, то вы можете detach это как

thread_pulse.detach(); 

после его создания. Это позволит завершить программу без исключения исключения.


В качестве альтернативы можно создать класс-оболочку, которая хранит нить, и когда он разрушается он будет вызывать join или detach для вас, так что вам не нужно помнить. Вы можете использовать что-то вроде Scott Myers ThreadRAII

class ThreadRAII 
{  
public:  
    ThreadRAII(std::thread&& thread): t(std::move(thread)) {} 
    ~ThreadRAII() { if (t.joinable()) t.join(); } 
private:  
    std::thread t;  
}; 

И либо изменить, чтобы позволить вам выбрать, следует ли join() или detach() или просто жесткий код поведения.

+0

Мне действительно нужен отряд. Спасибо, я отредактировал вопрос для будущей справки – heczaco

+0

@heczaco Нет проблем. Рад помочь. – NathanOliver