![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fifizuzu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 21.12.2012 Репутация: нет Всего: нет |
Как проверить завершился ли поток std::thread?
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
joinable() ??????
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Fifizuzu |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 21.12.2012 Репутация: нет Всего: нет |
Это сообщение отредактировал(а) Fifizuzu - 9.3.2013, 13:47 |
||||
|
|||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
все верно потоки у тебя работают поэтому true и возвращают http://en.cppreference.com/w/cpp/thread/thread/joinable Это сообщение отредактировал(а) Dem_max - 9.3.2013, 17:27 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
http://liveworkspace.org/code/rM3sL$10 Это сообщение отредактировал(а) borisbn - 9.3.2013, 21:41 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
borisbn, нормальное решение, подходящее для большинства случаев. Однако если функция потока находится в отсоединяемой от процесса DLL, я бы не рискнул его применять (так как нет никакой гарантии, что поток уже окончательно завершился даже при finished() == true).
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
feodorv, хммм... не понял... а что значит ? и чем это чревато ?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Тем что между m_finished = true; и } есть команды процессора, выполняющиеся в рамках созданного потока. Если другой поток, проверив finished(), решит, что DLL можно отсоединять, то существует вероятность, что DLL уже будет отсоединена от процесса, а якобы завершившемуся потоку нужно будет выполнить ещё несколько команд (находящихся уже в недействительной памяти процесса, что приведёт к нарушению доступа). Прошу прощения, не заметил вопроса: Я имел в виду, что к процессу может быть динамически присоединена DLL, экспортирующая некоторую функцию, которая затем будет использована в качестве функции потока. Это сообщение отредактировал(а) feodorv - 9.3.2013, 23:56 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
feodorv, ясно. Спасибо. Насколько я понимаю, это справедливо не только для DLL, но и просто для памяти, выделенной через new. Для моего примера:
Так? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Просто std::thread это какой то недоделанный костыль
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Похожая ситуация, только здесь возможен незапланированный вызов terminate()... Хорошо хоть так сделали, хотя и есть ощущение недоделанности. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| Fifizuzu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 21.12.2012 Репутация: нет Всего: нет |
Если код потока завершается, поток продолжает жить?
Я хочу сделать многопоточность для сервера. Хотелось бы пример. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Да потоку нужно очистить ресурсы, которые он занял. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |