По време на дългосрочни операции нашето приложение C++ Win32 показва модален диалогов прозорец за състояние с лента на процеса, който се актуализира нередовно на всеки няколко секунди или така. Започвайки с Windows 7, разбрахме, че Windows много скоро показва съобщение „изглежда увисва...“ и/или добавя „Не отговаря“ към заглавната лента на нашия прозорец.
Разбрахме, че диалоговият прозорец на процеса трябва да обработва съобщения, за да се избегне това. По-конкретно изглежда, че Windows 7 непрекъснато изпраща WM_UPDATE съобщения, за да провери дали нашата програма е жива. По-рано бяхме деактивирали всички ненужни обработки на съобщения в този диалогов прозорец, тъй като изпълнението на профили показва, че те забавят значително.
Но въпреки че смятахме, че сме поправили този проблем, потребителите отново съобщават за такива проблеми: Windows показва „изглежда увисва...“ и/или добавя „Не отговаря“ към заглавната лента на нашия прозорец, въпреки че обработваме всички събития на всеки няколко секунди.
Въпроси:
Има ли някаква документация за тази промяна в поведението в Windows 7 (или Windows Vista)? Не намерихме такива. Открихме и редица други промени в поведението на съобщенията.
Има ли евентуален начин да деактивирате всички такива проверки "живо ли е" от Windows? Нашето приложение е доста живо и процесите могат да отнемат доста дълго време.
РЕДАКТИРАНЕ: За да бъдем по-конкретни - това, което правим само на всеки няколко секунди, е да извикваме помпата за съобщения PeekMessage
/TranslateMessage
/DispatchMessage
.
Тъй като това е доста стара наследена програма, използването на отделна работна нишка не е възможно в близко бъдеще. Ние, разбира се, правим това за нов код. Моля, имайте предвид също, че основната ми гледна точка е, че това поведение определено се промени с Windows vista / Windows 7. Не намерих никаква документация за това.
DefWindowProc
. - person MSalters   schedule 09.08.2011