Не перерисовывается фон, когда неактивное окно изменяет своё положение

Kernel-side graphics support
  • Баг подтверждаю. Аналогичная программа на Обероне дала точно такой же результат. Если деактивировать окно щелчком по рабочему столу, то фон рабочего стола не перерисовывается. Запускал в VMware.
  • revision #6585
  • Вот я заметил, что иногда состояние процесса с этим окном становится "suspended"
    Spoiler:Image
    Оно так и должно быть?
  • Я тоже заметил, процесс приостанавливается когда его окно полностью располагается под активным окном. Может так и должно быть. Проверь, на каком этапе это происходит.
  • Не поймешь, на каком. Когда полностью под другим окном "wait event", а когда начинает вылазить из-под него "suspended". Попробовал запустить несколько таких процессов(4) — у меня от этого VirtualBox сломался :lol: "Во время работы виртуальной машины произошла критическая ошибка. Выполнение виртуальной машины приостановлено."
  • Pathoswithin wrote:Я тоже заметил, процесс приостанавливается когда его окно полностью располагается под активным окном. Может так и должно быть.
    Не должно такого быть. Оконная система в состояние процессов не должна вмешиваться.
  • Serge wrote:
    Pathoswithin wrote:Я тоже заметил, процесс приостанавливается когда его окно полностью располагается под активным окном. Может так и должно быть.
    Не должно такого быть. Оконная система в состояние процессов не должна вмешиваться.
    А если процессу больше нечего делать, кроме обработки сообщений от окна, которых не будет, поко оно позади?
  • //DG wrote:А если процессу больше нечего делать, кроме обработки сообщений от окна, которых не будет, поко оно позади?
    Это зависит от маски событий, которые процесс хочет получать, и от того, какую функцию для этого процесс использует. В общем случае процесс будет спать, пока для него нет событий. Но это он сам сделает, не оконная система.
    TASKDATA.state=1 появляется если процесс под отладкой, при блокировке сетевого сокета или при ожидании блокировки мьютекса/фьютекса.
  • Serge wrote:
    //DG wrote:А если процессу больше нечего делать, кроме обработки сообщений от окна, которых не будет, поко оно позади?
    Это зависит от маски событий, которые процесс хочет получать, и от того, какую функцию для этого процесс использует. В общем случае процесс будет спать, пока для него нет событий. Но это он сам сделает, не оконная система.
    TASKDATA.state=1 появляется если процесс под отладкой, при блокировке сетевого сокета или при ожидании блокировки мьютекса/фьютекса.
    А если мы ожидаем событий окна, а их нет, процесс не спит? Я имею в виду, ведь используется функция "получить сообщение", нет?
  • Тут ещё вот какой момент: если во время движения этого окна кликнуть правой кнопкой мыши по рабочему столу, то появится наше меню, и оно будет очень часто моргать\перерисовываться. А с чего бы ему, находясь на самом верху и будучи активным, перерисовываться?
  • //DG wrote:А если мы ожидаем событий окна, а их нет, процесс не спит? Я имею в виду, ведь используется функция "получить сообщение", нет?
    Спит, если это ф.10 или ф.23
  • Serge wrote:
    //DG wrote:А если мы ожидаем событий окна, а их нет, процесс не спит? Я имею в виду, ведь используется функция "получить сообщение", нет?
    Спит, если это ф.10 или ф.23
    Ну так - окно полностью закрыто, перерисовывать его не надо; никаких событий мыши/клавиатуры оно получать не будет, т.к. неактивно. Значит, оно законно будет спать в WaitMessage'е или как там оно называется. Ф.10.
  • Да будет спать. Но это процесс сам в такое состояние переходит. А вот почему вместо wait_state появляется suspended вопрос интересный.
  • Serge wrote:Да будет спать. Но это процесс сам в такое состояние переходит.
    Как, если он в системном вызове, в ядре? По идее, при пустой очереди его должны принудительно в спячку переводить, нет?
  • Who is online

    Users browsing this forum: No registered users and 2 guests