2015-11-26 3 views
1

Есть ли способ определить, работает ли поток? Я не могу использовать std::future и std::async по нескольким причинам.Проверьте, работает ли std :: thread

Я думал о каком-то join с таймаутом, например. попробуйте присоединиться к потоку в течение 3 секунд, если он преуспеет, поток считается завершенным, иначе он считается запущенным.

+0

Я думаю, вы хотите 'joinable'. Посмотрите документацию: http://www.cplusplus.com/reference/thread/thread/joinable/ –

+1

Если объект функции, вызванный потоком, находится под вашим контролем, самым простым вариантом является установка флага, связанного с 'std :: thread', когда поток заканчивается. Проверяя, жив ли поток, просто проверьте текущее состояние флага. – user4815162342

+0

Но 'joinable' скажет только, если поток присоединен или нет. Даже когда поток завершил выполнение. Или я ошибаюсь? – Nidhoegger

ответ

2

Ближе всего вы можете найти std::thread::joinable(). Чтобы привести ссылку:

Проверяет, указывает ли объект потока активный поток выполнения. В частности, возвращает true, если get_id() != std::thread::id(). Таким образом, построенный по умолчанию thread не соединяется.
Поток, который завершил выполнение кода, но еще не соединен, по-прежнему считается активным потоком исполнения и поэтому является соединяемым.

+2

Это не будет работать надежно, так как «std :: thread», который завершил выполнение, но еще не был отсоединен или присоединен, по-прежнему совместим. Вы даже процитировали этот факт. – sigy

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