178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373

GetMessageW зависает

25.12.2023, 12:25. Показов 839. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Имеется большая программа на WPF. Проблема в том, что если параллельно запущена игра в окне на UE4, то программа WPF в рандомный момент может зависнуть. Отладка показывает, что зависает она на вызове IntGetMessageW - нативной функции user32.dll.

Кто-нибудь с подобным сталкивался? Как эту проблему решить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2023, 12:25
Ответы с готовыми решениями:

Корректный выход из цикла GetMessageW
Есть библиотека, которая при внедрении в процесс создаёт новый поток, устанавливает SetWindowsHookEx на события WH_MOUSE и переходит к...

Пк зависает в определенной игре, комплектующие новые. ТРР и зависает намертво
Здравствуйте Форумчане, пришел на форум не от легкой жизни. Нужна Ваша помощь. Собрал пк сам. Установил Win10 x64. Комп виснет при...

Windows 7 намертво зависает, потом отвисает (зависает физическая память)
Здравствуйте. Есть проблема, ОС переодический внезапно зависает. Чем это вызвано я не понял, но чаще всего зависание происходит если...

5
16 / 17 / 0
Регистрация: 12.01.2022
Сообщений: 142
25.12.2023, 15:58
Там много вариантво почему виснуть может. Покажи код или приложение не твое?
1
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
25.12.2023, 16:36  [ТС]
Приложение моё, кода в нём очень-очень много, но фокус в том, что виснет оно вне моего кода. Просто диспатчер берёт и зависает. Я везде где надо использую Dispatcher.BeginInvoke и не жду завершения, т.е. это точно не мой код. Виснет оно только если параллельно запущена игра на UE4. Если запустить сам UE4 - зависания нет.

Вот стек:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    ntdll.dll!_NtWaitForSingleObject@12()
    KERNELBASE.dll!WaitForSingleObjectEx()
    WindowsBase.ni.dll!65665d4a()
    [Указанные ниже кадры могут быть неверны или отсутствовать; отладчик машинного кода пытается пройти по стеку управляемых вызовов] 
    WindowsBase.ni.dll!65665d35()
    [Переход от управляемого кода к машинному]   
>   WindowsBase.dll!MS.Win32.UnsafeNativeMethods.GetMessageW(ref System.Windows.Interop.MSG msg, System.Runtime.InteropServices.HandleRef hWnd, int uMsgFilterMin, int uMsgFilterMax) Строка 4758 C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.GetMessage(ref System.Windows.Interop.MSG msg, System.IntPtr hwnd, int minMessage, int maxMessage) Строка 1750    C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame) Строка 1718 C#
    WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame) Строка 550  C#
    PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore)   
    PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window)  
    PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window)
    PresentationFramework.dll!System.Windows.Application.Run()
    Tesseract.exe!SkyChroma.App.Main()  
    [Переход от машинного кода к управляемому]   
    mscoreei.dll!__CorExeMain@0()   Нет данных
    mscoree.dll!_ShellShim__CorExeMain@0()
    mscoree.dll!__CorExeMain_Exported@0()   
    ntdll.dll!___RtlUserThreadStart@8() 
    ntdll.dll!__RtlUserThreadStart@8()
Тут ещё нюанс: сборка мусора после зависания тоже перестаёт происходить. Если когда приложение WPF уже зависло нажать паузу в студии - она тоже зависнет. Чтобы получить этот стек, я сделал дамп памяти через диспетчер задач и открыл его - только тогда увидел где проблема.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
25.12.2023, 21:12
Цитата Сообщение от VBDUnit Посмотреть сообщение
Я везде где надо использую Dispatcher.BeginInvoke и не жду завершения, т.е. это точно не мой код.
C#
1
Dispatcher.BeginInvoke(new Action(() => { while(true) { Thread.Sleep(1000); } }));
Если такой код выполнить в вашей программе тоже не зависнет? BeginInvoke ведь. Зависание невозможно.
1
178 / 33 / 17
Регистрация: 02.02.2014
Сообщений: 373
25.12.2023, 21:22  [ТС]
Тогда при отладке главного потока я бы попадал прямиком в этот цикл. А я попадаю в GetMessageW, который кого-то (или чего-то?) ждёт. Очень редко спустя где-то минуту ловится деадлок:
C#
1
2
ContextSwitchDeadlock" 
  Сообщение = Помощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0x390901b8 в COM-контекст 0x39090100 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций.
Фокус в том, что если нажать паузу - студия тоже зависает, пока не вылезет вот это вот. Или не вылезет. Я поискал подобные проблемы у других людей, нашёл похожее при комбинации WPF и UWP: https://github.com/dotnet/wpf/issues/8347, и оно решается хуком. Поставил такой хук - не помогло. Я даже понять не могу, чего он ждёт вообще. UE4-приложение при этом не виснет.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
26.12.2023, 15:36
VBDUnit, тут нужно поподробнее что имеется ввиду под "комбинацией" приложений.
Так или иначе, все указывает на то что ваш код вызывает что то что блокирует цикл обработки сообщений и нужен MRE чтобы понять что именно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2023, 15:36
Помогаю со студенческими работами здесь

Комп зависает с звуковым статтером, а после обычной перезагрузки - зависает на определении памяти
Вообщем, у меня есть довольно сложная проблема и я не могу выявить решение. При запуске и инициализации биоса, именно после перезагрузки -...

Через 5 минут после запуска игры компьютер зависает, на экране появляется цветные линии, картинка зависает.
(зависает компьютер ,когда запускаешь игру в течении 5 минут на экране появляется цветные линии и картинка виснет)Видеокарта G-forse 9600GT...

комп зависает намертво при работе с новым винчестером, после перезагрузки компа зависает при загрузке BIOS
купил новый винчестер. комп стал зависать намертво. при перезагрузке, зависает уже при загрузке на заставке выбора выхода в BIOS (Press DEL...

У меня зависает комп, этот же комп не зависает почему то у соседа
Всем привет. Подскажите плиз. Зависает компьютер на мёртво(даже capslok) перестаёт работать, после минут 5 работы. Сосед слегка...

зависает.
Program KurRab; Uses Crt, Graph; Type strmenu=record x: integer; s: string; end; Const kol=4; mas:array of strmenu=


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru