Russian Qt Forum
Ноябрь 23, 2024, 04:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: main зависает перед return и не хочет завершаться...  (Прочитано 7215 раз)
Aptimist
Гость
« : Март 05, 2005, 10:23 »

Проблема изложена в заголовке темы.
  Добавлю только, что приложение написано на C++,  многопоточное (я бы даже сказал: очень многопоточное), и перед закрытием аккуратно командует потокам "свертайсь", ждёт пока они все не завершаться и только потом пробует сделать "return EXIT_SUCCESS;" из main, но... на этом самом месте она и виснет...
  Может что-то происходит со стеком во время выполнения приложения и потому return становиться не возможным?.. Но, к сожалению, я ещё не настолько продвинутый программер... и не знаю, что может повлиять на стек... тем более функции main...
  Может, чего подскажите...
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Март 05, 2005, 10:56 »

есть средства отладки позволяющее смотреть выходы за пределы масивов за стреком и так далее

под виндой - это Bound Checker
под линуксом - valgrind
Записан
Aptimist
Гость
« Ответ #2 : Март 05, 2005, 11:02 »

Цитата: "Admin"
есть средства отладки позволяющее смотреть выходы за пределы масивов за стреком и так далее

под виндой - это Bound Checker
под линуксом - valgrind


О том, что такие средства существуют я знаю, но, как мне известно, valgrind не справляется с многопоточными приложениями... :-(
Если я ошибаюсь, то подскажите, как  это можно провернуть...
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Март 05, 2005, 11:37 »

я не пишу таких приложения

но у валгринда есть опция типа
--trace-child
так он пытается за потомками  следить
Записан
Aptimist
Гость
« Ответ #4 : Март 05, 2005, 11:55 »

Цитата: "Admin"
я не пишу таких приложения

но у валгринда есть опция типа
--trace-child
так он пытается за потомками  следить

Так child, как я понимаю, это дочерний процесс, а не как не поток...
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Март 05, 2005, 13:51 »

я не большой спец
не то так не то
Записан
PROGrand
Гость
« Ответ #6 : Июль 09, 2005, 21:37 »

Возможно в функции main объявлена переменная класса, который тормозит процесс выхода из функции. Т.е. перед выходом из функции завершается существование пременной и деструктор тянет процесс. типа:

Было:
int main()
{
CClassWithWaitIndestructor var; // этот класс и проверить надо будет насчёт зависона в деструкторе.

WaitForMultipleObjects(hThreadsArray, ... , WAIT_ALL, ...);

return 1;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.