![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
eldar85 |
![]()
Сообщение
#1
|
![]() программист ![]() ![]() ![]() Группа: Участник Сообщений: 283 Регистрация: 2.1.2010 Из: Москва Пользователь №: 1348 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
странная проблема, при длительной работе программы в течении нескольких часов, прога вылетает.
я запускаю в несколько потоков и программа должна выполнять поиск в сети, ищет изменения на сайте, но эт о не столь важно... как сделать так что если уж к примеру вылетел один поток, чтобы остальные работали или чтобы вообще не вылетали при длительной работе... уже столько вариантов перебрал зараза и один хрен при длительной работе вылетает... |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Если потоки принадлежат одному процессу, то ошибка в одном потоке убьёт весь процесс. Лучше, конечно, искать ошибку )) Или, как вариант, сделать простенькую программку, которая будет запускать несколько таких процессов (то есть не потоки делать, а процессы) и перезапускать, если что
|
|
|
BRE |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Найти причину, т.е. ошибку.
|
|
|
eldar85 |
![]()
Сообщение
#4
|
![]() программист ![]() ![]() ![]() Группа: Участник Сообщений: 283 Регистрация: 2.1.2010 Из: Москва Пользователь №: 1348 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а как понять сделать несколько процессов? потоков я много запускаю, причем они делают практическм одно и то же, и сначала все идет стабильно, прога делает одно и тоже повторяясь и повторяясь а потом бамс и вылетает(страшно вылетает, сколько потоков столько и сообщений вылазиет) ))))))) ошибку уже наверное неделю ищу, ну все перерыл... и нифига)
а как лучше в многопоточных прогах ошибку через дебагер искать? просто запускать дебагера и смотреть что произойдет или как лучше? я с дебагером просто почти не пользовался и то с однопоточными прогами... а запуск потоков примерно так выглядет
это получается в одном процессе все потоки работают? |
|
|
Алексей1153 |
![]()
Сообщение
#5
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
И часто ты вызываешь MainWindow::start() ?
![]() Конечно, в одном процессе Но дело тут, похоже , в самом потоке - покажи его Сообщение отредактировал Алексей1153 - 17.8.2010, 19:59 |
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
а как лучше в многопоточных прогах ошибку через дебагер искать? просто запускать дебагера и смотреть что произойдет или как лучше? как обычно. просто у дебаггеров есть окно с выбором потоков. при паузе или брекпойнте останавливаются все потоки и ты можешь выбирать поток и он показывает тебе весь контекст этого потока. и у тебя там будет как минимум 101 поток ![]() ты запусти для дебага хотя бы два потока. так виднее будет. бага может быть вообще не связана с многопоточностью. запусти один поток и проверь - будет падать или нет. и проще выложи код твоих потоков. так можно будет сказать, что там не так. у меня опыт разработки в параллельных вычислениях большой, я быстро обнаруживаю баги подобного рода. основные причины, как правило: - передача локальных переменных ссылками в поток (когда порождающий поток завершается или падает - дочерние потоки получают мусор в своих ссылках) - использование статических переменных в потоках. можно, но опасно и геморно. надо понимать, что делаешь. а так, многопоточные приложения лучше обязательно тестировать на многопроцессорных (многоядерных) компах. на одном проце многие баги могут просто не проявляться. |
|
|
eldar85 |
![]()
Сообщение
#7
|
![]() программист ![]() ![]() ![]() Группа: Участник Сообщений: 283 Регистрация: 2.1.2010 Из: Москва Пользователь №: 1348 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Mainwindow::start() в программе вызывается всего раз, но массив я вообще никак не чищу... а разве Qt сам не может очищать память?
и если честно я даже не знаю как удалить динамический массив... возможен вылет программы из за переполнения памяти к примеру если в каждом потоке создается класс as_curl* curl = new as_curl; и никак не не удаляется?) код сейчас выложу потока... вот так правильно будет?нет, так точно не прокатит))) потоки убиваются сразу)) |
|
|
Алексей1153 |
![]()
Сообщение
#8
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Нет, такой массив он не почистит. Qt массивы вообще не чистит - он объекты свои удаляет, и то не всегда )
удалить так delete [] thread; конечно убиваются - это надо делать, когда потоки уже не нужны ![]() Сообщение отредактировал Алексей1153 - 18.8.2010, 12:40 |
|
|
BRE |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Алексей1153 |
![]()
Сообщение
#10
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2944 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
сделай так, раз массив не нужен
BRE, очепятка ) Исправил |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.7.2025, 18:10 |