2012-05-10 16 views
10

Tworzę wątek w funkcji, aw innej funkcji chcę zatrzymać ten wątek. Próbowałem tak:Jak zatrzymać/przerwać boost :: thread?

class Server 
{ 
private: 
    boost::thread* mPtrThread; 
... 

public: 
    void createNewThread() 
    { 
     boost::thread t(...); 
     mPtrThread = &t; 
    } 


    void stopThread() 
    { 
     mPtrThread->interrupt(); 
    } 
} 

Ale to nie mogę przestać work.How wątku?

Odpowiedz

20

Jeśli chcesz użyć metody interrupt(), powinieneś zdefiniować interruption points. Wątek zostanie przerwany po wywołaniu interrupt(), gdy tylko osiągnie jeden z punktów przerwania.

+0

Dziękuję bardzo! – wtm

17

Przede wszystkim w createNewThread() zadeklarować boost::thread t w lokalnego zakresu i przypisać jej wskaźnik do członka klasy mPtrThread. Po zakończeniu createNewThread(), t zostanie zniszczony, a mPtrThread będzie zawierać niedozwolony wskaźnik.

Wolałbym użyć czegoś takiego jak mPtrThread = new boost::thread(...);

Możesz również przeczytać this article, aby dowiedzieć się więcej o wielowątkowości w Boost.

+1

Naprawdę fajny artykuł, pomóżcie dużo. Dziękuję ~ – wtm

+0

Powinieneś również użyć inteligentnego wskaźnika, aby upewnić się, że wątek boost :: thread zostanie usunięty. – allyourcode