когда отсоединять или присоединяться к буст-теме? - PullRequest
7 голосов
/ 02 марта 2012

У меня есть метод, который запускается раз в 30 секунд.что мне нужно иметь в потоке.

У меня есть метод, который я могу вызвать вне класса.Что-то вроде callThreadedMethod (), который создает поток, который сам вызывает последний threadadedMethod.

Это методы MyClass

void callThreadedMethod(){
    mThread = boost::shared_ptr<boost::thread>(new boost::thread(&MyClass::threadedMethod, this));
}

void threadedMethod(){
    //more code NOT inside a while loop
}

Так нужно ли отключать mThread при каждом вызове метода?

Достаточно ли вызвать метод join () в деструкторе MyClass?

Разрушается ли поток после завершения работы threadadedMethod?

1 Ответ

13 голосов
/ 02 марта 2012

Это зависит от того, чего вы хотите достичь. Если вас не волнует, когда или если вызовы threadedMethod завершаются, или нет, или нет, тогда вы можете просто detach поток, как только вы его создали; каждый поток будет уничтожен после завершения метода. И вы не должны хранить поток в переменной-члене.

Если вам не все равно, вам нужно вызывать join для каждого создаваемого вами потока (то есть один раз для каждого потока, а не один раз в деструкторе). Я подозреваю, что нет.

Вам действительно нужно создавать новую ветку для каждого звонка? Создание потока может быть дорогостоящим, поэтому альтернативой может быть использование пула потоков и отправка каждого вызова threadedMethod. Тогда у пула может быть время жизни MyClass instance. Но, возможно, это излишне для того, что происходит только раз в 30 с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...