Как заставить бустовые потоки самоуничтожаться?(C ++) - PullRequest
4 голосов
/ 08 ноября 2010

У меня есть класс с такой функцией, как:

void workerFunc(int ClassVariable)  
{  
    boost::posix_time::seconds workTime(classVariableA);  

    std::cout << "Worker: running" << std::endl;  

    // Pretend to do something useful...  
    boost::this_thread::sleep(workTime);  


    std::cout << ClassVariable << std::endl;  
    std::cout << "Worker: finished" << std::endl;  
}  

, которой я хочу быть в потоках.и некоторые другие функции, которые я хочу работать как

while(1)
{
 boost::thread workerThread(workerFunc(ClassVariableB));  
}

, поэтому он будет создавать поток каждый раз, когда это возможно.Но мне нужно, чтобы этот поток самоуничтожился, когда закончил.Как это сделать?

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Вам не нужно ничего делать для этого.Вы просто должны убедиться, что поток действительно завершается (т.е. не имеет бесконечных циклов или чего-то подобного).

2 голосов
/ 08 ноября 2010

Поток автоматически завершится, когда завершит работу функции, для которой он был создан.

join - странное слово, оно действительно означает wait_for, что означает ожидание завершения выполнения потока.

Если вы хотите сохранить поток для повторного использования, он обычно реализуется путем создания своего функционального цикла, каждый раз переходящего в состояние «ожидания», когда он получает предупреждение (просыпается), когда происходит что-то, что он ожидает. В какой-то момент это будет запрос на прекращение или запрос, который приведет к его прекращению.

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