120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
||||||
1 | ||||||
Программа падает при использовании std::thread26.07.2017, 17:36. Показов 1662. Ответов 10
Метки нет (Все метки)
Дополнительный вопрос:почему эта программа падает:
0
|
26.07.2017, 17:36 | |
Ответы с готовыми решениями:
10
Падает программа при использовании DLL Ошибка при создании потока std::thread Ошибка при передаче двумерного массива в функцию std::thread Ошибки при использовании std::map |
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|
26.07.2017, 21:58 [ТС] | 3 |
тогда нужно сделать динамический массив из потоков?или есть решение получше?Количество созданных потоков не известно заранее(прога сервер,для каждого клиента новый поток)
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
26.07.2017, 22:08 | 4 |
жесссть >_<
бедный сервер... бедное железо... нельзя так издеваццо над братьями нашеми меньшаме!!!!
0
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|
26.07.2017, 22:15 [ТС] | 5 |
hoggy, я же не сервер вроде гугла пишу,а так играюсь просто.А что есть другие,более оптимизированные способы обработки клиентов?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.07.2017, 00:01 | 6 |
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
|
|
27.07.2017, 00:08 | 7 |
Сообщение было отмечено Ilot как решение
Решение
Программа "падает" (а точнее - вполне контролируемо вызывает
std::terminate ) потому, что ваш объект thr находится в joinable состоянии в момент вызова его деструктора. Деструктировать std::thread объект можно только тогда, когда он [уже] не является joinable. Т.е. либо после вызова join() , либо после вызова detach() , либо если объект "пуст" (вообще не ассоциирован ни с каким тредом).
1
|
120 / 4 / 1
Регистрация: 15.06.2016
Сообщений: 236
|
|
27.07.2017, 00:42 [ТС] | 8 |
hoggy, но ведь accept блокирует поток
TheCalligrapher, Действительно,метод detach решил проблему
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.07.2017, 01:04 | 9 |
почитайте про многопоточность что нибудь.
например, почему 100500 тредов это - плохо, и нафиг не нужно. откройте для себя thread_pool. в вашем простейшем случае - то, что доктор прописал. Std::thread приостановка потока затем гляньте дизайн boost.asio, что бы понять, каким вообще должен быть дизайн годного сетевого движка.
0
|
1375 / 519 / 72
Регистрация: 21.07.2015
Сообщений: 1,304
|
|
27.07.2017, 01:38 | 10 |
Асинхронный вввод/вывод? Не, не слышал. Открой для себя boost asio, в частности async функции.
Добавлено через 2 минуты http://www.boost.org/doc/libs/... load2.html Добавлено через 3 минуты Блокирующий ввод имеет смысл в сетевом программировании только при работе с коммуникационными портами (их редко бывает много) или если программа обслуживает максимум несколько клиентов.
0
|
Любитель чаепитий
|
|
27.07.2017, 05:57 | 11 |
можно только для
accept 'a создать отдельный поток, например.а всё остальное крутить в основном.
0
|
27.07.2017, 05:57 | |
27.07.2017, 05:57 | |
Помогаю со студенческими работами здесь
11
Ошибка при использовании std::allocator Std::thread. Нет ожидаемого поведения при независимом вычислении элементов вектора Использование std::function в std::thread Выдается ошибка в std при использовании оператора for Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |