crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Работа с потоками, борьба с зависанием при загрузке файлов(файла)
AD
  опции профиля:
сообщение 6.2.2009, 12:14
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Работа с потоками выглядит довольно хитро. В главном потоке: есть вектор, в котором хранятся считанные данные, есть функции по заполнению этого вектора. В дополнительном потоке: есть вектор со считанными данными, через определенное время (3 секунды) вызывается функция главного потока заполнения вектора, вектор дополнительного потока очищается. В дополнительном потоке происходит как раз чтение и разбор файла (ну соответственно и заполнение вектора доп. потока). После чтения всего файла если вектор доп. потока не пуст, то вызывается функция главного потока заполнения вектора.

Проблема в том, что при загрузке определенных лог-файлов происходит зависание программы. Каким образом заставить программу вывалится в дебаггер именно при зависании? У кого-нибудь есть какие-нибудь идеи?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.2.2009, 14:20
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Буду рад за любые подсказки. Очень нужно найти причину подвисания....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 9.2.2009, 12:01
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Похоже на дедлок.
Запусти под отладчиком, дождись зависона и стопни процесс - дальше смотри вде висишь.
Ещё можно записывать в лог каждый захват/освобождение мютекса/симофора.
Потом смотри где клинчь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.2.2009, 12:24
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 9.2.2009, 12:01) *
Похоже на дедлок.
Запусти под отладчиком, дождись зависона и стопни процесс - дальше смотри вде висишь.

А как остановить процесс во время клинча? Я не делал раньше так, поэтому даже не знаю....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 9.2.2009, 13:28
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Это от дебагера зависит - в любом свои команды есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 9.2.2009, 13:59
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 9.2.2009, 13:28) *
Это от дебагера зависит - в любом свои команды есть.

Вроде как разобрался. Спасибо. Если что, еще помучаю? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 14.1.2025, 0:00