|
|
|||||||||||
Странное падение в момент обработки сообщения25.04.2011, 22:13. Показов 1465. Ответов 7
Метки нет (Все метки)
Имеется оконная программа, работающая с потоком. В программе запускается поток. Поток через PostMessage отправляет в Handle от окна (формы TForm) сообщение WM_USER. Сообщение отправляется практически сразу после создания потока (по результату сокращения внешних условий для воспроизведения ошибки). В классе окна прописан стандартным образом ловушка для сообщений:
Если между рождением потока и вызовом PostMessage поставить sleep с небольшой задержкой, то слома не происходит. Если поставить брекпоинт в данное место, то ошибки не происходит. В точке, соответсвующей case'у всё в порядке: this корректный, *Message корректно читается Ну и как частный вопрос по Builder'у: как продизассемблировать мою функцию? В builder'е есть кнопка Disassemble, но она дизассемблирует только функцию, находящуюся на вершине стека
0
|
|||||||||||
| 25.04.2011, 22:13 | |
|
Ответы с готовыми решениями:
7
Резкое падение скорости обработки запросов В какой момент появляются сообщения в console.log |
|
|
||
| 25.04.2011, 22:20 [ТС] | ||
|
0
|
||
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
||||||
| 26.04.2011, 01:30 | ||||||
|
В общем, я так и не понял проблему.
0
|
||||||
|
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
|
|
| 26.04.2011, 21:14 | |
|
А не в самом ли обработчике WM_User проблема? В него заходит, или падает до него? Правда, как это связано со Sleep, тут вообще даже предположений нет.
0
|
|
|
|
|
| 26.04.2011, 21:34 [ТС] | |
|
Да в том-то и дело, что ошибка из разряда нестабильных. Просто когда я PostMessage в моём случае подтащил как можно ближе к точке создания потока, то начало более-менее стабильно повторяться. Проблемы в своей программе я разгребу, если есть. Мне бы понять, что за стек такой и каким макаром мы залетаем в KiUserExceptionDispatcher. Эта некая фича, вызваная через аппаратное прерывание (при подкачке страницы, например) или что ещё за зверь такой. В гугле толком ничего не нашёл
Чем можно продизассемблировать функцию, чтобы посмотреть "свою" функцию хотя бы на предмет того, там какой-то call находится или ещё какая-нибудь ересь
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 26.04.2011, 21:44 | ||
|
0
|
||
|
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
|
|
| 26.04.2011, 22:04 | |
|
как я лично понял, KiUserExceptionDispatcher-стартовая точка обработки любых SEH-исключений, оттого видать туда и залетаем.
А вот как отловить этот плавун... Я бы попробовал делать лог хотя бы в тот же файл, что и печать. Типа перед вызовом PostMessage пишем "вызов", в момент входа в WM_User - "получено", можно еще добавить перед выходом что-нибудь. Вот только как сделать закрытие этого файла при ошибке. Попробовать все это завернуть в еще один try??? А насчет дизасма, по BC я полный 0, но может воспользоваться каким левым инструментом?. Типа, добавить для поиска в начало своей функции каку-нить строчку, в той же Olly найти эту строчку, и через ссылку на нее получить вход в свою функцию. Но неужели в BC нет нормального дизасма, вроде у них с самого начала с этим проблем не было. Добавлено через 16 минут И еще вот взбрела такая мысля - я бы проверил свой код на предмет наличия условий типа "тут можно не проверять результат - такого не может быть никогда". Обычно помогает, а то, чего не может быть, случается. Особенно что касается каких-то ресурсов, которые могут быть заняты (это я по поводу Sleep)
1
|
|
|
|
||||||||||
| 26.04.2011, 23:14 [ТС] | ||||||||||
|
Этот код у меня уже давно работает без проблем, а потому я считал его отлаженным. Видимо, просто проблема не проявлялась раньше. Где копать теперь понятно. Правда всё равно не понятно, почему наличие второго сообщения в очереди сообщений привело к такому крэшу. Добавлено через 7 минут Хотя нет... эффект наложения печатей произошёл из-за того, что я поставил печать в начале WM_User и в конце. А конечная печать происходит после освобождения семафора, так что она не в том месте стоит. После правильной расстановки печатей выглядит всё правильным. Первый цикл отрабатывает корректно. На второй раз в WM_User зашли, но оттуда уже не вышли. Но зацепка тем не менее есть, так что спасибо за идею, буду копать дальше Добавлено через 13 минут Ну и ещё раз на всякий случай. Правильно ли я работаю с семафором?
Добавлено через 3 минуты Ай да Пушкин, ай да сукин сын! Какой же я тупой! ДЕЙСТВИЕ1 формирует указатель, ДЕЙСТВИЕ2 этот указатель использует. Для подстраховки после использования указатель обнуляется. Но обнуление я поставил ПОСЛЕ ReleaseSemaphore. Вот блин протупил так протупил.... И святая истина, что когда начнёшь другому объяснять свой код, то начинаешь замечать в нём ошибки. А пока не объясняешь - нифига их не видно. В который раз убедился, что это так и в который раз не могу понять, почему так происходит
0
|
||||||||||
| 26.04.2011, 23:14 | |
|
Помогаю со студенческими работами здесь
8
Обработки сообщения от кнопки Telegram bot: как отправлять сообщения пользователю в определённый момент времени? Перенаправление / вывод сообщения после обработки формы
Найти момент сил M, действующие на шар в момент времени t =2 с после начала движения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|