2017-02-16 6 views
4

Как я могу получить объект std::thread, представляющий текущий (уже запущенный поток).Как получить std :: thread текущей темы?

Я знаю, что могу сделать std::this_thread::get_id(). Однако это даст мне объект std::thread:id.

Моя основная цель - разрешить некоторым другим потокам присоединиться к текущему. Тем не менее, проблема в том, что текущий не был начат путем создания std :: thread, поэтому я не мог его заранее сохранить.

+3

Представьте, что вы * можете * получить ссылку на себя, и вы вызвали 'this_thread(). Join()' ... –

+0

Функциональность 'std :: thread', которую вы можете выполнить в текущем потоке: http: // www.cplusplus.com/reference/thread/this_thread/ – Tas

+0

Вы не можете называть «join» в текущем потоке, потому что вы присоединяетесь к себе, как указывает Керрек. – Brandon

ответ

6

Вы не можете получить объект std::thread, относящийся к потоку, который не был создан конструктором std::thread. Либо используйте библиотеку потоков C++, либо не используйте ее вообще. Например, если текущий поток был создан pthread_create, его нужно будет объединить с использованием pthread_join.

1

std::thread не копировально. Возможность произвольного получения потока без получения ресурсов от первоначального создания нарушит работу потока.

Любая ссылка на поток должна быть или была перенесена из объекта, на который был вызван конструктор.

Смежные вопросы