OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 14:04

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Среда, 24 Январь, 2007 10:50 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Сергей Губанов писал(а):
Чего-то тут не многопоточность обсуждается, а оконная подсистема. Надо в другую ветку форума перемещаться...

Цитата:
когда мышь отпущена


Мышь может быть нажата на одном окне, а отпущена уже на другом. То есть окно на котором мышь была нажата, сообщения об отпускании нажатой кнопки может и не получить.


Если для окна на WM_LBUTTONDOWN вызвана GetCapture
то и WM_LBUTTONUP окно получит, где-бы не была отпущена клавиша мыши.

P.S. Здесь обсуждается очередь сообщений в контексте многопоточности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 24 Январь, 2007 17:00 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Штирлиц писал(а):
Сергей Губанов писал(а):
Чего-то тут не многопоточность обсуждается, а оконная подсистема. Надо в другую ветку форума перемещаться...

P.S. Здесь обсуждается очередь сообщений в контексте многопоточности.

Сергей прав, не надо связывать все колготки в один узел. Многопоточность - это одно, а проблемы фреймворка с его не во всех местах очень хорошей обработкой сообщений - другое. Предлагаю переместиться в тему "BlackBox Framework/Проблема Ports.Rider.Input".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 24 Январь, 2007 18:25 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Александр Ильин писал(а):
Штирлиц писал(а):
Сергей Губанов писал(а):
Чего-то тут не многопоточность обсуждается, а оконная подсистема. Надо в другую ветку форума перемещаться...

P.S. Здесь обсуждается очередь сообщений в контексте многопоточности.

Сергей прав, не надо связывать все колготки в один узел. Многопоточность - это одно, а проблемы фреймворка с его не во всех местах очень хорошей обработкой сообщений - другое. Предлагаю переместиться в тему "BlackBox Framework/Проблема Ports.Rider.Input".


Я не путаю многопоточность и проблемы фреймворка. Просто когда работает поток наступает момент когда он с этим самым фреймворком должен как-то взаимодействовать. И если это взаимодействие оформлено не совсем хорошо, то эту проблему нельзя решать фреймворк отдельно, а активные процедуры отдельно.
Надо решать это совместно. И почему немного не доработать
фреймворк? Тогда было-бы просто все замечательно.

P.S. Я как-то не хочу что-бы что-то замирало в приложении только потому, что пользователь нажал на кнопку мыши (или нажали кнопку alt и случайно попал в меню) и не отпускает. Не хочу чтобы грузился процессор на 100%, как-будто мышь при этом начала производить сложнейшую вычислительную работу.
:D .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 24 Январь, 2007 22:10 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Штирлиц писал(а):
Я не путаю многопоточность и проблемы фреймворка. Просто когда работает поток наступает момент когда он с этим самым фреймворком должен как-то взаимодействовать. И если это взаимодействие оформлено не совсем хорошо, то эту проблему нельзя решать фреймворк отдельно, а активные процедуры отдельно.
Надо решать это совместно. И почему немного не доработать
фреймворк? Тогда было-бы просто все замечательно.

P.S. Я как-то не хочу что-бы что-то замирало в приложении только потому, что пользователь нажал на кнопку мыши (или нажали кнопку alt и случайно попал в меню) и не отпускает. Не хочу чтобы грузился процессор на 100%, как-будто мышь при этом начала производить сложнейшую вычислительную работу.
:D .

Простите, но все же пуатете. Наверное потому, что хотите реализовать синхронизацию через сообщения по аналогии с Delphi VCL. Но ведь это лишь один из способов, не единственный.
Что касается проблем, перечисленных вами в посткриптуме, то они относительно давно решены, и ссылку на патчи я вам дал. Проблема фоновой перерисовки не была решена, поскольку я не считал ее существенной.
Да, фреймворк просится в доработку, но все же это задача, не связанная с многопоточностью. Синхронизацию потоков с фреймворком можно сделать без изменений в логике обработки сообщений, например, по аналогии с патчем фоновой многозадачности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 25 Январь, 2007 09:06 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Штирлиц писал(а):
P.S. Я как-то не хочу что-бы что-то замирало в приложении только потому, что пользователь нажал на кнопку мыши (или нажали кнопку alt и случайно попал в меню) и не отпускает.

Зависит от приложения. Вон в ворде все замирает и никто не жалуется.

Штирлиц писал(а):
Не хочу чтобы грузился процессор на 100%, как-будто мышь при этом начала производить сложнейшую вычислительную работу.

А вот это меня совсем не заботит. ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 25 Январь, 2007 11:34 

Зарегистрирован: Среда, 17 Январь, 2007 03:59
Сообщения: 225
Trurl писал(а):
Штирлиц писал(а):
P.S. Я как-то не хочу что-бы что-то замирало в приложении только потому, что пользователь нажал на кнопку мыши (или нажали кнопку alt и случайно попал в меню) и не отпускает.

Зависит от приложения. Вон в ворде все замирает и никто не жалуется.

Штирлиц писал(а):
Не хочу чтобы грузился процессор на 100%, как-будто мышь при этом начала производить сложнейшую вычислительную работу.

А вот это меня совсем не заботит. ;)


Ну, если Вас это не заботит, тогда вы относитесь к тому типу программистов, которые пишут программы 2+2 = 4. А потом
говорят заказчику, что-то моя программа не пошла на Вашем компьютере. Купите какой-нибудь 4-х процессорный сервак с 4Гб памяти, а еще лучше майнфрейм. Вот тогда она заработает.:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 25 Январь, 2007 12:33 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Решение со Sleep(0) внутри HostPorts.Input решает основную проблему - процессор не грузится, и другие потоки не тормозятся.
Александр прав - Input должен выполняться как непрерываемая операция, иначе получим букет побочных проблем.

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

Взаимодействие должно быть косвенным, поток меняет модель - т.е. данные. Отображение периодически отрисовывает эти данные. Сигнал на периодическое обновление подается через Services.Action.
Т.е. GUI и потоки обработки данных взаимодействуют только через общие объекты данных - модели, защищенные, само собой, эксклюзивными блоками, а синхронизироваться по действиям они не должны - GUI по определению на несколько порядков медленнее любых других операций, и ждать главный поток из быстрых потоков без необходимости нельзя.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB