Russian Qt Forum

Программирование => С/C++ => Тема начата: Aptimist от Март 05, 2005, 10:23



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


Название: main зависает перед return и не хочет завершаться...
Отправлено: Admin от Март 05, 2005, 10:56
есть средства отладки позволяющее смотреть выходы за пределы масивов за стреком и так далее

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


Название: main зависает перед return и не хочет завершаться...
Отправлено: Aptimist от Март 05, 2005, 11:02
Цитата: "Admin"
есть средства отладки позволяющее смотреть выходы за пределы масивов за стреком и так далее

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


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


Название: main зависает перед return и не хочет завершаться...
Отправлено: Admin от Март 05, 2005, 11:37
я не пишу таких приложения

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


Название: main зависает перед return и не хочет завершаться...
Отправлено: Aptimist от Март 05, 2005, 11:55
Цитата: "Admin"
я не пишу таких приложения

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

Так child, как я понимаю, это дочерний процесс, а не как не поток...


Название: main зависает перед return и не хочет завершаться...
Отправлено: Admin от Март 05, 2005, 13:51
я не большой спец
не то так не то


Название: main зависает перед return и не хочет завершаться...
Отправлено: PROGrand от Июль 09, 2005, 21:37
Возможно в функции main объявлена переменная класса, который тормозит процесс выхода из функции. Т.е. перед выходом из функции завершается существование пременной и деструктор тянет процесс. типа:

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

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

return 1;
}