"Счётчик скрытий курсора" - так я назвал очень важную переменную, ответственную за то, виден ли в настоящий момент курсор на экране или нет. Проблема, собственно, следующая.
Несколько раз я замечал, что при убивании какого-либо процесса из программы CPU пропадает курсор. Причём пропадает безвозвратно. Не зная, что думать, и экономя своё время, я просто перезагружал систему и работал дальше. Но вот я не выдержал и задумался, причиной чего послужило замечание Johnny_B о том, что в программе AIRC курсор мыши мограет, когда перерисовывается курсор в поле ввода программы. Даже при том, что курсор мыши не находится в области перерисовки курсора программы.
Я тут же вспомнил про свою проблему и сделал смелое предположение: а что, если при принудительном завершении процесса наш *счётчик* не уменьшается до нуля. Например, процесс завершается в тот момент, когда выполняется какая-либо процедура рисования, а *счётчик* увеличен на единицу. В этом случае, *счётчик* уже более никогда не станет равен нулю, вплоть до перезагрузки ядра/системы. Тем более что такое происходит, когда я убиваю программы, активно рисующие что-либо.
Предположение печальное, и хотелось бы услышать мнение других, как и возможные пути решения проблемы.
Баг со счётчиком скрытий курсора
-
in code we trust
Печальное, но правильное. В нормальных системах приложения не убиваются по середине системного вызова. Но при этом возникают проблемы, если системный вызов зависает.
Так я же уже писал об этом в теме про Колибри 0.5.8.1 - только там речь шла про закрытие активного графического приложения по Alt+F4. Вроде бы Марат даже что-то там разумное ответил.
Да, что-то я стормозил.
Кстати, переменная так и не помогает. Буквально вчера сидел в КоОСе и опять-таки видел эти глюки с неправильной отрисовкой фона под курсором, при активации окон. Или просто кто-то где-то забыл её лишний раз увеличить/уменьшить?
Но никаких действий по этому вопросу пока что не было предпринято, так?Mario79 wrote:Сложный вопрос. Дело в том, что уже давно для уменьшения глюков курсора я ввел переменную [mouse_pause] и при убивании потока возможна ситуация, когда inc [mouse_pause] уже был, а dec [mouse_pause] еще нет. В результате переменная не вернулась к прежнему значению и курсор не выводится.
Можно конечно при убивании потока насильно обнулять переменную, но в результате она может заиметь отрицательное значение, что тоже не очень хорошо.
Пока я не знаю, как решить эту проблему.
Конечно, полное переписывание алгоритма вывода (без отключения курсора) может помочь, но это еще надо реализовать, поскольку код получится гораздо сложней существующего, и будет затрагивать весь код относящийся к видеовыводу.
Кстати, переменная так и не помогает. Буквально вчера сидел в КоОСе и опять-таки видел эти глюки с неправильной отрисовкой фона под курсором, при активации окон. Или просто кто-то где-то забыл её лишний раз увеличить/уменьшить?
Я видел такой глюк в xonix. После того как основное окно закрылось остался прямоугольник от курсора
хМРЕПЕЯМН,Ю ЙЮЙ ЩРЮ ОПНАКЕЛЮ ПЕЬЮЕРЯЪ Б ДПСЦХУ ЯХЯРЕЛЮУ.
Научите пожалуйста понимать такие сообщения
Экспериметы с Бред-ом никаких результатов не дают
Экспериметы с Бред-ом никаких результатов не дают
"Интересно,а как эта проблема решается в других системах." =) плохо бредом пытался
Я это сообщение писал из firefox-а.Когда писал сообщение - всё было по русски,а когда отправил - абракадабры.В чём причина - мне непонятно.
Это раньше в RedHat были проблемы с русской кодировкой,а в SuSE 10.1 с ней всё впорядке.Почему firefox отправил в неправильной кодировке - непонятно.
Это раньше в RedHat были проблемы с русской кодировкой,а в SuSE 10.1 с ней всё впорядке.Почему firefox отправил в неправильной кодировке - непонятно.
andrew_programmer
Я тоже пишу из Firefox'а и всё в норме. Решение твоей проблемы:
Edit -> Preefrences -> Content -> Advanced -> Character Encoding -> Cyrillic (Windows-1251)
Насчёт решения на других системах - аппаратные курсоры, устанавливаемые через функции видеокарт или БИОСа. Для функций видеокарт нужны драйвера (обсуждение не тут), а функции БИОСа, насколько я помню, устанавливают курсор максимум 16х16, и невысокой битности, без альфа-канала. Иначе курсор *будет* моргать, и его *нужно* будет скрывать при рисовании, если конечно не рисовать только по обратному ходу луча что, естественно, сильно замедлит отрисовку.
Была ещё одна идея, для которой курсор прятать не нужно. Заключается в том, что при рисовании производится проверка, находятся ли некоторые рисуемые пикселы в области прямоугольника курсора, и если да, эти пискелы рисуются в бэк-буфер курсора, а не на экран. в этом случае, скрывать курсор не придётся, только показывать, после отрисовки примитива.
Я тоже пишу из Firefox'а и всё в норме. Решение твоей проблемы:
Edit -> Preefrences -> Content -> Advanced -> Character Encoding -> Cyrillic (Windows-1251)
Насчёт решения на других системах - аппаратные курсоры, устанавливаемые через функции видеокарт или БИОСа. Для функций видеокарт нужны драйвера (обсуждение не тут), а функции БИОСа, насколько я помню, устанавливают курсор максимум 16х16, и невысокой битности, без альфа-канала. Иначе курсор *будет* моргать, и его *нужно* будет скрывать при рисовании, если конечно не рисовать только по обратному ходу луча что, естественно, сильно замедлит отрисовку.
Была ещё одна идея, для которой курсор прятать не нужно. Заключается в том, что при рисовании производится проверка, находятся ли некоторые рисуемые пикселы в области прямоугольника курсора, и если да, эти пискелы рисуются в бэк-буфер курсора, а не на экран. в этом случае, скрывать курсор не придётся, только показывать, после отрисовки примитива.
Только проверка принадлежности пиксела курсору занимает много времени... Можно правда хранить не прямоугольник, а целую горизонтальную полосу. Тогда проверки будут нужны только по одной координате, но прорисовка курсора замедлится - нужно будет считывать эту полосу из видеопамяти при каждой прорисовке. Также можно хранить копию всего изображения экрана - тогда можно всегда узнать пикселы какого цвета нужно рисовать для стирания курсора.
mike.dld
Помогло.Только в современной версии Mozilla Firefox опции выглядят совершенно по другому.
Помогло.Только в современной версии Mozilla Firefox опции выглядят совершенно по другому.
Who is online
Users browsing this forum: No registered users and 7 guests