![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Доброе время суток, Всем.
В общем жалавался я уже на свою проблему, но похоже виновником ошибся, а проблема осталась. Пользуюсь VC7 (и на VC6 проверял - теже тормаза) Есть главный поток, отвечающий за GUI. Он запускает дочерний поток, который делает расчеты. Так вот, я хочу проверить правильность работы алгоритма и я ставлю брейкпоинт в начале алгоритма, вставленого в дочерний поток. И тут ... всё начинает по сумашедшиму тормазить ![]() Так было и пол года назад, я думал, что проблемы вызывает антивирус, но... Получив новое задание (в котором без отладки кода в дочернем потоке не обойтись) и помня о замарочках, я поставил голую винду и на неё VC6, а тормаза остались. Вывод: тормаза возникают из-за внутренних конфликтов с правами доступа для трассировки дочернего(их) потока(ов) КАК УБРАТЬ ТОРМАЗА??? ![]() Это сообщение отредактировал(а) neosapient - 22.4.2007, 11:21 |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Пользуйся нормальными отладчиками, вроде тех, что в IDA или OllyDBG.
И определись что тебе всё-таки надо: или Процесс или поток? + приоритеты процессов посмотри, одинаковые? -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
neosapient |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Потоки (а там опечатка, я её исправил)
Я приоритеты не меняю, так что по умолчанию |
||||
|
|||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
![]() Давай исходник дочернего потока. Была схожая проблема, loop-ился в главной фнукции до ожидания заполнения структуры данных(постоянно!!!), исправил синхронизацией, с использованием мьютекса или евента. -------------------- korbian © |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
neosapient, вывод однозначный: что-то не так с твоими потоками. Потому что правильные потоки отлаживаются в VC 6 совершенно нормально. Нужен не только исходник потоковой функции, но и код запуска.
А может ты условную точку прерывания ставишь? Тогда не только интерфейс - все тормозит по страшному... -------------------- ... |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
Это как, поясни, пожалуйста? -------------------- korbian © |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Как-как... точка прерывания, которая срабатывает не при любом прохождении потока управления через нее, а при выполнении заданного условия. Ну скажем, тебе надо в цикле из 1000 итераций отладить 654-ю. Не будешь же ты 653 раза на Run жать... "Обычные" точки прерывания реализуются подменой команды в коде, а условные - это, надо полагать, уже накрутка в среде, вот и тормозят не по-детски...
-------------------- ... |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Прикрепил в приложении А брейк поинт ставлю в функции GenerateSymbol(), Save2DMassive(...), Load2DMassive(...) Которые вызываются из потока ThreadFunc(...)
Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 9 Всего: 14 |
У меня симптомы, к сожалению
![]() по коду: Нет CloseHandle(hThread) и вместо CreateThread() лучше использовать _beginthreadex()(все равно ведь под VC++ пишешь) -------------------- korbian © |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Ставишь breakpoint. три-пять раз: запускаешь (F5), трассируешь (F11) Симптомы появятся Это сообщение отредактировал(а) neosapient - 24.4.2007, 17:16 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну, что тут сказать, проблема довольно распространенная, в вижах она проявляется не так уж сильно, у борланда все намного печальнее: при дебаге дочернего процесса step-by-step замирает через раз на 20-30 секунд, при этом, замирает винда, ощущение такое, что происходит вторжение на уровне ядра, при том, что в вижах нечто подобное отнимает порядка 10-15 секунд. Очевидно, тут дело не в коде. Подозреваю, что дебагеры используют функции ожидания типа WaitForSingleObject, применительно к отлаживаемым потокам, а так как момент синхронизации подразумевает только 2-х участников, то 3-й (дебагер) каким-то образом нарушает эту эдилию. Вижи верно ставят интервал задержки поменьше, но проблема все таки остается...
...есть смысл вместо отладки многопоточных приложений переходить на их тестирование: дампирование, ведение лога, и т.п. К тому же это относится только к дочерним потокам, основной эта тема не затрагивает, по крайней мере, это все таки куда проще, нежели отлаживать например хуки: пока хук не снял, системе управление не вернется , отсюда все вытекающие... -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Aleksandor |
|
|||
![]() Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
А вот это не разгадка?
В двух словах — если у Вас VS 2005 (в статье говорится что та же проблема бывает и с 6.0 и 2003) периодически в момент дебага жутко "тормозит" всю систему — поставьте флажок в: Control Panel/Regional And Language Options/Language/Details/Advanced/Turn off advanced text services. И обязательно перегрузитесь! После этого исчезнет Language Bar, но переключение раскладок работать будет. -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
neosapient |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Переведу Пуск -> Настройки -> Панель управления -> Языки и региональные стандарты -> вкладка Языки -> Подробнее -> вкладка Дополнительно -> поставить галочку Выключить дополнительные текстовые службы Один минус раскладка клавиатуры отменена (если не перегрузиться), т.е. писать можно только на английском Вроде помогло ![]() Это сообщение отредактировал(а) neosapient - 25.4.2007, 21:21 |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Aleksandor, очень интересная инфа.
У меня, правда, опция оказалась выключенной, и, насколько помню, никогда ее не включала. Наверное, поэтому с такой проблемой не сталкивалась. neosapient тебе должен целый ящик репутаций... -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
К сожалению, эта опция не решила проблему, по крайней мере в борланде, надо думать дальше...
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |