У меня есть окно, которое делает долгий расчет. Я хочу свести его к минимуму, чтобы получить доступ к своему рабочему столу, но он не отвечает на события (один поток занят вычислением). Я ожидал, что это будет исправлено в win8.1?

В Linux: нажмите свернуть, окно будет свернуто, несмотря ни на что.

Я предполагаю, что разница в том, что в Linux ОС отвечает за события панели инструментов окна и разрешения, что она может делать.

2 ответа2

0

Нет, разница в том, что функция оконного окошка, посмотрите: DisableProcessWindowsGhosting().

Отключает функцию окошек для вызывающего процесса GUI. Оконное окошко - это функция диспетчера Windows, которая позволяет пользователю свернуть, переместить или закрыть главное окно приложения, которое не отвечает.

Чтобы отключить его, вы можете использовать Application Compatibility Toolkit для создания и установки пользовательской базы данных Application Compatibility, чтобы отключить функцию Ghost Window для вашей программы.

Чтобы загрузить набор средств для обеспечения совместимости приложений, посетите следующий веб-узел Microsoft.

0

Для Windows приложение обрабатывает перерисовку пользовательского интерфейса. Если программист использовал поток пользовательского интерфейса для выполнения вычислений, то вы застряли. Это не вина версии Windows, это не слишком элегантное программирование автора приложения. ;)

У Microsoft есть очень хорошая документация, описывающая описываемое вами явление и то, как программисты приложений могут его избежать.

Предотвращение зависаний в приложениях Windows

Вводная реклама:

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

Программист может распознать множество законных причин, по которым приложение не реагирует мгновенно на ввод пользователя. Приложение может быть занято пересчетом некоторых данных или просто ожиданием завершения ввода-вывода. Тем не менее, из пользовательского исследования мы знаем, что пользователи раздражаются и расстраиваются после нескольких секунд безразличия. Через 5 секунд они попытаются завершить зависшее приложение. Помимо сбоев, зависания приложений являются наиболее распространенным источником нарушения работы пользователя при работе с приложениями Win32.

Рекламные проспекты:

Сохраняйте простой интерфейс

Основная обязанность потока пользовательского интерфейса - получать и отправлять сообщения. Любой другой вид работы представляет риск зависания окон, принадлежащих этой теме.

Делать:

  • Перемещение ресурсоемких или неограниченных алгоритмов, которые приводят к длительным операциям, в рабочие потоки
  • Определите как можно больше вызовов блокирующих функций и попытайтесь переместить их в рабочие потоки; любая функция, вызывающая другую DLL, должна вызывать подозрения
  • Приложите дополнительные усилия для удаления всех вызовов файлового ввода-вывода и сетевых API из вашего рабочего потока. Эти функции могут блокироваться на много секунд, если не минут. Если вам нужно выполнить какой-либо ввод-вывод в потоке пользовательского интерфейса, рассмотрите возможность использования асинхронного ввода-вывода
  • Помните, что ваш поток пользовательского интерфейса также обслуживает все однопоточные COM-серверы (STA), размещенные вашим процессом; если вы делаете блокирующий вызов, эти COM-серверы не будут отвечать до тех пор, пока вы снова не будете обслуживать очередь сообщений

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .