|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Может не в том разделе спрашиваю, но нет раздела Программирование под Windows. Много лет наблюдаю интересную картину. Если зажать и держать стандартную (на заголовке окна) кнопку "Закрыть окно", то перестаёт обновляться GUI. Вот запускаем банальный Notepad, зажимаем мышкой кнопку Закрыть и перестаёт мигать курсор. Почему? И какова механика наблюдаемого явления? PS: Погуглил слегка, но вроде ничего толкового не нашёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 07:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Событие идет на ФАКТ отпускания кнопки. А ты не отпустил. Вот все и ждуны и ждут))). Подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 09:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Событие идет на ФАКТ отпускания кнопки. А ты не отпустил. Вот все и ждуны и ждут))). Подходит? Нет, потому что такое происходит только при зажатии стандартных кнопок на заголовке окна. Остальных кнопок это не касается. Да и вообще, предположение не логичное с точки зрения очереди событий. Куча приложений так себя ведёт. Например, тот же Process Explorer от Руссиновича. И Qt приложения так себя ведут. Могу предположить, что зажатие этих кнопок блокирует событие WM_TIMER, например, или вообще всю виндовую очередь событий приложения. Но почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 10:48 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Нет, потому что такое происходит только при зажатии стандартных кнопок на заголовке окна "Суслика видишь?" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 10:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav Нет, потому что такое происходит только при зажатии стандартных кнопок на заголовке окна "Суслика видишь?" (с) Какая ОС? Какое приложение? На чём написано? Я только что под Win7 зажал кнопку Закрыть в Process Explorer (видимо чистый WinAPI) и в Qt-приложении. И они перестали обновляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Ооооо. Qt действительно так ведет. А студия нет. Старье наверно. Так написано. Не многозадачно. Охота тебе голову ломать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:03 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Студия - меню - Tools - Spy++ Запусти и посмотри класс главного окна. Топик стартер должен больше работать отвечающих (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:06 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Ооооо. Qt действительно так ведет. А студия нет. Старье наверно. Так написано. Не многозадачно. Охота тебе голову ломать. Кстати, да. Студия резво продолжает обновляться... А стандартный Task Manager замерзает. Многопоточность тут, я думаю, не причём. Самое интересное, сколько я помню так было всегда - начиная с Win95 и WinNT 4.0. И вот спустя десятилетия я решил разобраться. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:13 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Многопоточность тут, я думаю, не причём. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 11:21 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Win10, блокнот, просто поводил мышем над крестиком - курсор перестал моргать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 12:23 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dima T Win10, блокнот, просто поводил мышем над крестиком - курсор перестал моргать. "перекуём баги на фичи" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 12:25 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petravСтудия резво продолжает обновляться... Самоочевидный ответ: у студии в заголовке нарисованы ненастоящие кнопки. Поэтому нажатие на них до DefWindowProc() не доходит. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 13:41 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Скорее всего имеет место оптимизация графических действий. Я помню что при drag window старые версии Windows-95 вообще не транслировали состояние окна. Только прозрачную рамку до тех пор пока вы не отпустите ЛКМ. В версиях типа Windows-98 делался снимок (картинка) окна и фиксировалась то тех пор пока не отпустите ЛКМ тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 13:46 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravСтудия резво продолжает обновляться... Самоочевидный ответ: у студии в заголовке нарисованы ненастоящие кнопки. Поэтому нажатие на них до DefWindowProc() не доходит. Да, у приложений у которых не стандартный заголовок окна, такой фишки не наблюдается. Само собой, я постоянно акцентировал внимание, что кнопки стандартные. PetroNotC Sharp petrav, Студия - меню - Tools - Spy++ Запусти и посмотри класс главного окна. Топик стартер должен больше работать отвечающих (с) Про Spy++ я забыл. У Qt приложения полностью остановилась очередь виндовых сообщений. По логами видно, что QTimer тоже остановился. У других приложений на С++ очередь виндовых сообщений остановилась на 99%. Остались только WM_MOUSEMOVE и WM_GETICON. Как и предполагалась MS Windows, видимо, останавливает очередь событий. Но зачем?! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 13:54 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav MS Windows, видимо, останавливает очередь событий. Но зачем?! Факт ОТПУСКАНИЯ КНОПКИ важен. Вы ее не отпустили. А гуи в одном потоке работает. Поставь в buttonClick( sleep Будет заморозка? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:04 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
maytonЯ помню что при drag window старые версии Windows-95 вообще не транслировали состояние окна. Любые версии так делают если в настройках производительности снять галочку "Отображать содержимое окна при перетаскивании". petravНо зачем?! Затем, что в MS тоже не поголовно гении, а этот код, скорее всего, никто не трогал со времён былинных. Так что если там стоит, например, CaptureMouse + свой собственный цикл обработки сообщений до отпускания кнопки, то... имеем то, что имеем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:10 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav MS Windows, видимо, останавливает очередь событий. Но зачем?! Факт ОТПУСКАНИЯ КНОПКИ важен. Вы ее не отпустили. А гуи в одном потоке работает. Поставь в buttonClick( sleep Будет заморозка? Мне иногда кажется, что ты студент, который вчера на экзамене по программированию пятёрку получил. Ответь: - Что общего между зажатой кнопкой и Sleep? - Почему зажатие других кнопок не приводит к заморозке? И события нормально продолжают идти? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:11 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Затем, что в MS тоже не поголовно гении, а этот код, скорее всего, никто не трогал со времён былинных. Так что если там стоит, например, CaptureMouse + свой собственный цикл обработки сообщений до отпускания кнопки, то... имеем то, что имеем. Да, у меня тоже было предположение, что это просто глюк который идёт чуть ли не с Win3.11 и который каким-то образом перескочил в семейство WinNT. Или же это какая-то архитектурная проблема - идеологическая и они просто не могут исправить ошибку проектирования. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:16 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav пятёрку получил petrav Почему зажатие других кнопок не приводит к заморозке? И события нормально продолжают идти? У каких других? Сделай кнопу на окне и посмотри. Ждем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:16 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav исправить ошибку проектирования. :) Если в винде на событие кнопы Копировать обработчик тормознуть, то кнопа так и будет Не отжата. Тоже непорядок? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpТоже непорядок? Да, "тормознутие" это непорядок. Но в твоём коде этот непорядок на твоей совести. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:25 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpТоже непорядок? Да, "тормознутие" это непорядок. Но в твоём коде этот непорядок на твоей совести.конечно. А то что юзверь тормознул и заснул на кнопе Закрыть окно на чьей совести? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:30 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Как там дела с кодировками и с автоматизацией ваших заводов и параходов? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Как там дела с кодировками и с автоматизацией ваших заводов и параходов? Работаем. Владельцем заводов-пароходов пока не стал, но стих думаю угадал. А что есть интересная тема для обсуждения? Вы же инженер программного обеспечения (Software Engineer), а настоящему инженеру всегда есть что сказать. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 17:24 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
По поводу кнопки Close? Да так себе тема. Неинтересно. Я тоже увлекался графическим и геометрическим моделированием но тема юае-строительства меня как-то обошла. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 17:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton По поводу кнопки Close? Да так себе тема. Неинтересно. Я тоже увлекался графическим и геометрическим моделированием но тема юае-строительства меня как-то обошла. А что такое "юае"? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 17:36 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
UI. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 17:43 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton По поводу кнопки Close? Да так себе тема. Неинтересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:15 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton UI. Понятно. Ну тема кнопки Close не такая уж и тривиальная. Вопрос стоит так: может ли пользователь таким простым образом разрушить работу приложения? Ведь дело не в том, что там что-то обновляться перестало. А дело в том, что в потоке GUI могут приниматься какие-то решения. А если они не будут приняты вовремя, то по отчётам будет видно, что приложение подвисло надолго. И кто же в этом виноват? Это, конечно, умозрительные рассуждения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
На рубеже возникновения всяких сред восстановления типа GHost, Acronis, e.t.c. эти все штуки полностью копировали интерфейс Windows-95. Причем достаточно компактно (на нескольких килобайтах) они реализовывали почти все нужные контролы вплоть до табличек. Я тогда студентом был. И мы в Borland C++ тоже соревновались кто сделает UI в MS-DOS как можно более похожим на настоящий ТруЪ оконный. Про макос мы тогда разве что в журналах и газетах читали. Поэтому с ним сравнивать не могли. Ну а Unix тогда для нас существовал в виде чёрного экрана и мигающего курсора центрах проводной связи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:19 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav какие-то решения petrav Это, конечно, умозрительные рассуждения. Конечно умозрительные. Какие решения если с ГУИ источник событи юзверь? То есть ты никак не поймешь, заснул юзверь сам или он напечатал, а тормозит текстовый редактор. Есть тесты для этого и простая человеческая логика. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav какие-то решения petrav Это, конечно, умозрительные рассуждения. Конечно умозрительные. Какие решения если с ГУИ источник событи юзверь? То есть ты никак не поймешь, заснул юзверь сам или он напечатал, а тормозит текстовый редактор. Есть тесты для этого и простая человеческая логика. Есть оборудование взаимодействие с которым не критично по времени. Даже если реакция последует через секунду, то это приемлемо. Источник событий там QTimer, WM_TIMER, etc. Для упрощения архитектуры ПО многопоточность там излишняя. Но если по отчётам будет видно, что приложение висело две минуты и сорвало управление, то это будет проблемой. Понимаешь? Не, ты не понимаешь... Ты лабы сделал? А то скоро сессия. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:39 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav mayton UI. Понятно. Ну тема кнопки Close не такая уж и тривиальная. Вопрос стоит так: может ли пользователь таким простым образом разрушить работу приложения? Ведь дело не в том, что там что-то обновляться перестало. А дело в том, что в потоке GUI могут приниматься какие-то решения. А если они не будут приняты вовремя, то по отчётам будет видно, что приложение подвисло надолго. И кто же в этом виноват? Это, конечно, умозрительные рассуждения. ОС Windows не является ОС реального времени. И ЕМНИП там даже предусмотрена буферизация графических событий. Помните? Когда приложение долго не отвечает... вы можете накликать овер дохрена кликов и мышиных дейстий. И когда основной цикл WndProc внезапно отмёрзнет - он получит пакетом всю очередь событий которые вы посылали ранее. Эта механика - ВНЕ вашего приложения. Вы ее не программировали. Это услуга со стороны Win32GDI. И это реально очень классная услуга. Я когда-то переходил с Windows на Linux Suse + KDE. Впечатление у меня было - ужасное. Все те механики которые работали на Windows - морозились и глючили под KDE. Клавиатурные события - терялись. Ты долбил мышкой по подзависшему окну и оно событий не принимало. Windows же на том-же железе работал вполне терпимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:52 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Недавно 40 чел сгорело на суперджете. Командир джойстиком вверх вниз до отказа херачил, а рули просто не успевали за ним. Обратной связи не было. Ну, пилот и в ступор впал. Не сообразил что с задержкой и плавно надо.. ГуИ качать. Не смешно конечно. Программное обеспечение отечественное. И людей жалко. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:55 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton ОС Windows не является ОС реального времени. И ЕМНИП там даже предусмотрена буферизация графических событий. Помните? Когда приложение долго не отвечает... вы можете накликать овер дохрена кликов и мышиных дейстий. И когда основной цикл WndProc внезапно отмёрзнет - он получит пакетом всю очередь событий которые вы посылали ранее. Никто и не пытается выдавить из ОС MS Windows жесткое реальное время. Но мягкое вполне возможно. По отчётам я вижу, что в приложении 99.98% ответов на внешнее воздействие произошло за миллисекунду. Где-то 0.0001% ответов прошло за 15 мс. Видимо это или работа с файловой системой, или с динамической памятью. Это более чем приемлемо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 18:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav А дело в том, что в потоке GUI могут приниматься какие-то решения. Все решаемо, только предмет разговора нужен). А не кнопка Выключить виндовс. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:00 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Недавно 40 чел сгорело на суперджете. Командир джойстиком вверх вниз до отказа херачил, а рули просто не успевали за ним. Обратной связи не было. Ну, пилот и в ступор впал. Не сообразил что с задержкой и плавно надо.. ГуИ качать. Не смешно конечно. Программное обеспечение отечественное. И людей жалко. Оффтоп, но вся авионика (приборы) на СуперДжете импортные, кажется французские. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:01 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Где-то 0.0001% ответов прошло за 15 мс. Видимо это или работа с файловой системой, или с динамической памятью. Это более чем приемлемо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav mayton ОС Windows не является ОС реального времени. И ЕМНИП там даже предусмотрена буферизация графических событий. Помните? Когда приложение долго не отвечает... вы можете накликать овер дохрена кликов и мышиных дейстий. И когда основной цикл WndProc внезапно отмёрзнет - он получит пакетом всю очередь событий которые вы посылали ранее. Никто и не пытается выдавить из ОС MS Windows жесткое реальное время. Но мягкое вполне возможно. По отчётам я вижу, что в приложении 99.98% ответов на внешнее воздействие произошло за миллисекунду. Где-то 0.0001% ответов прошло за 15 мс. Видимо это или работа с файловой системой, или с динамической памятью. Это более чем приемлемо. Ты когда - нибудь использовал QNX Neutrino? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav авионика (приборы) на СуперДжете импортные, кажется французские ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:03 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
ПО - программное обеспечение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:04 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav авионика (приборы) на СуперДжете импортные, кажется французские Авионика - это и есть ПО. Приборы, всё ПО которое в них работает, автопилот. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:07 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Ты когда - нибудь использовал QNX Neutrino? Я нет, но оно ставится в соседнем отделе. Любимая игрушка. Но у меня профиль другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:10 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petravДля упрощения архитектуры ПО многопоточность там излишняя. Но если по отчётам будет видно, что приложение висело две минуты и сорвало управление, то это будет проблемой. Понимаешь? Не, ты не понимаешь... Я тоже не понимаю человека, который создаёт большие и злобные грабли на будущее только для того, чтобы облегчить себе работу здесь и сейчас. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:12 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Авионика - это и есть ПО. Приборы, всё ПО которое в них работает, автопилот. Суть в том, что командиру предъявлено уголовное обвинение. Он джойстик вверх - а оно не реагирует. Так у тебя? Смотри чтоб не посадили. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav mayton Ты когда - нибудь использовал QNX Neutrino? Я нет, но оно ставится в соседнем отделе. Любимая игрушка. Но у меня профиль другой. По поводу "0.0001% ответов прошло за 15 мс". Давай порассуждаем. Вот если открыть task manager windows - то там можно видеть сет процессов. Процессов которые случайным образом испольуют кванты времени процессора а иногда и подгружают его различными вычислениями природу которых мы не знаем. И существует не пустая вероятность что 2-3 или 4-5 из них одновременно стали активничать. Вобщем я думаю то это и есть те самые 0.0001% задержек которые ты наблюдал. Как с этим бороться - я не знаю. Самый правильный ответ - уходить с Windows и неправильный - просто убивать эти процессы или сделать так чтобы их вообще был минимум. В идеале тебе нужен только процесс твоего приложения. Все остальное нужно сделать taskkill, и заблокировать навсегда в Services и заблокировать из меню авто-запуска. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Так у тебя? Нет. PetroNotC Sharp Смотри чтоб не посадили. Я смотрю за этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:24 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Нет Пока в сухом остатке так: Ты нажал на кнопку и не отпустил. Значит вмешался в основную очередь ГУИ. Все по правилам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav Авионика - это и есть ПО. Приборы, всё ПО которое в них работает, автопилот. Суть в том, что командиру предъявлено уголовное обвинение. Он джойстик вверх - а оно не реагирует. Так у тебя? Смотри чтоб не посадили. Немного не в тему. И не в тему данного супержета. Вот к примеру в Айрбасе. Джойстик. И пилот эдак случайно повернулся и локтем его задел. Нужно программно зафильтровать эту ошибку? Нужно. А нефик случайно его дёргать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:36 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Самый правильный ответ - уходить с Windows и неправильный - просто убивать эти процессы или сделать так чтобы их вообще был минимум. В идеале тебе нужен только процесс твоего приложения. Все остальное нужно сделать taskkill, и заблокировать навсегда в Services и заблокировать из меню авто-запуска. Даже если у вас там выключен Касперыч и MS-Indexing-Service то есть еще много служб (сетевые) которые обеспечивают сетевую инфра-структуру Windows и обязаны реагировать например на сетевые события. Есть много примеров атак на отказ в обслуживании когда атакующий делает различного рода интеракции с сетевыми службами листенереы которых подняты и просто обязаны обслужить входящий реквест. Что из этого можно придумать - ну.. дофига чего. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:39 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravДля упрощения архитектуры ПО многопоточность там излишняя. Но если по отчётам будет видно, что приложение висело две минуты и сорвало управление, то это будет проблемой. Понимаешь? Не, ты не понимаешь... Я тоже не понимаю человека, который создаёт большие и злобные грабли на будущее только для того, чтобы облегчить себе работу здесь и сейчас. Вы правы, как всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:40 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Даже если у вас там выключен Касперыч и MS-Indexing-Service то есть еще много служб (сетевые) которые обеспечивают сетевую инфра-структуру Windows и обязаны реагировать например на сетевые события. Есть много примеров атак на отказ в обслуживании когда атакующий делает различного рода интеракции с сетевыми службами листенереы которых подняты и просто обязаны обслужить входящий реквест. Что из этого можно придумать - ну.. дофига чего. :) Речь, конечно, не об этом. Всё оборудование отключено от сети. Но не в этом дело. Там разные хакерские атаки через флешку - это всё излишне. Мы тут проще вопросы обсуждаем. А именно: если мы доверили процессу GUI принимать решения, то любой пользователь может вмешаться в этот процесс. А за логи отвечать нам. Поэтому нельзя. Видимо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:50 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Так не пиши процессы которые зависят от UI. Помнишь я говорил что время реакции человека - 100мс. И время взаимодействия клавиатуры и мыши еще медленее. Вообще нельзя никакие тайм-критичные вычисления завязывать на UI. И пример с notepad - неудачен. Notepad - это однопточное UI приложение где весь жизненный цикл живет внутри WndProc. Следовательно любая атака GDI событиями вызывает срабатывание хендлера Notepad. Просто он - так спроектирован. Как и calc, paint, e.t.c и прочие бесплатные апликухи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 19:55 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Так не пиши процессы которые зависят от UI. Помнишь я говорил что время реакции человека - 100мс. И время взаимодействия клавиатуры и мыши еще медленее. Вообще нельзя никакие тайм-критичные вычисления завязывать на UI. И пример с notepad - неудачен. Notepad - это однопточное UI приложение где весь жизненный цикл живет внутри WndProc. Следовательно любая атака GDI событиями вызывает срабатывание хендлера Notepad. Просто он - так спроектирован. Как и calc, paint, e.t.c и прочие бесплатные апликухи. Так я и не пишу приложения, которые зависят от UI. Но дело в том, что разработка многопоточного приложения, порядково сложнее однопоточного. Это, конечно, нам студенты сейчас расскажут как по этой тематике лабы ваяли и открыли для себя локеры. И как всё было просто, потом перешли на Яву... Вопросов масса: например если рабочий поток шлёт неблокирующее сообщение потоку GUI, а тот висит. Вот что будет? И главное деньги, как пояснить руководству, что это очень сложно? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 20:09 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Так я и не пишу приложения, которые зависят от UI. Но дело в том, что разработка многопоточного приложения, порядково сложнее однопоточного. Это, конечно, нам студенты сейчас расскажут как по этой тематике лабы ваяли и открыли для себя локеры. И как всё было просто, потом перешли на Яву... Вопросов масса: например если рабочий поток шлёт неблокирующее сообщение потоку GUI, а тот висит. Вот что будет? И главное деньги, как пояснить руководству, что это очень сложно? Да асинхронные приложения писать сложнее. Ты прав. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 20:11 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Вопросов масса: например если рабочий поток шлёт неблокирующее сообщение потоку GUI, а тот висит Дорого? Да! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 20:13 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav А дело в том, что в потоке GUI могут приниматься какие-то решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 20:29 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav А дело в том, что в потоке GUI могут приниматься какие-то решения. Так я за это только и ратую. Но есть проблема: многопоточные приложения порядково сложнее однопоточных. Задача дёшево и быстро выпускать программы, которые надёжны и функциональны. И решают проблемы заказчика, а не философствование про что-то там. И главное надёжность. Вот в чём конфликт идеологий. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 20:39 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav А дело в том, что в потоке GUI могут приниматься какие-то решения. Допустим у нас есть поток GUI. Он выполняет свои задачи отображения данных. Есть рабочий поток, который управляет взаимодействием с устройством, есть поток чтения из Ethernet, причём чтение вообще блокирующее. Причём из потока GUI нужно управлять логикой выполнения в рабочем потоке. Нужно останавливать работу из потока чтения Ethernet, нужно перезапускать логику алгоритма внутри рабочего потока, но из потока GUI. И переключать чтение на другой канал данных. Нужно что бы поток GUI отображал всегда корректные данные. А если поток GUI принимает решение об управлении устройством? Нельзя? Нужно. Всё должно работать как часы. И абсолютно потокобезопасно. Если пользователь нажимает кнопку Закрыть, то все потоки корректно завершают свою работу. И всё красиво без малейших задержек. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:10 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Вот в чём конфликт идеологий. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:10 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petravкоторые надёжны и функциональны. Точнее будет "хоть как-то работают, но уже сейчас". petravА если поток GUI принимает решение об управлении устройством? Нельзя? Нужно. Всё должно работать как часы. Сам по себе? Это фантастика. GUI поток может только передавать "внутрь" воздействия пользователя. А если ползатель зажал кнопку и не отпускает, то и передавать нечего. Не может мышь сразу два воздействия произвести. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:16 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav Вот в чём конфликт идеологий. Без проблем. Есть люди, которые создают качественные приложения. Я всегда об этом говорил. А есть которые просто планку переставляют. И об этом я тоже говорил. В своих топиках я хотел бы разговаривать с профессионалами, а не с теми кто планку переставляет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravА если поток GUI принимает решение об управлении устройством? Нельзя? Нужно. Всё должно работать как часы. Сам по себе? Это фантастика. GUI поток может только передавать "внутрь" воздействия пользователя. А если ползатель зажал кнопку и не отпускает, то и передавать нечего. Не может мышь сразу два воздействия произвести. Не... не в этом дело. Мир несовершенен. Допустим мы спроектировали наше приложение так, что только из рабочего потока непосредственно взаимодействуем с устройством. Не всё так просто. Иногда нужно срочно разработать тестовый функционал, так что бы он работал из потока GUI напрямую с оборудованием - это заманчиво просто, но не убил поток рабочий. Это сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:24 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Сам по себе? Это фантастика. GUI поток может только передавать "внутрь" воздействия пользователя. А если ползатель зажал кнопку и не отпускает, то и передавать нечего. Не может мышь сразу два воздействия произвести. Т.е. ты рассуждаешь в терминах идеального проектирования и достаточного времени на реализацию. Но так бывает не всегда, это большая удача когда тебе позволили реализовать идеальный дизайн (архитектуру) приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
В общем, смысл в чём? Смысл в поиске идеальной архитектуры, это невозможно, ищем компромисс. - И так что бы логика приложения не зависела от GUI. - И так что бы гарантированно потокобезопасно в нашей концепции. - И что бы просто было в использовании нашего фундамента. Чем мы за это платим? За всё нужно платить. В данном случае платим тем, что фундамент приложения заточен сугубо под наши задачи. Заточен в мелочах, причём в управляемых мелочах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:53 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav И так что бы логика приложения не зависела от GUI. И начальство вас не поймет. И денег не выделит. Если у вас учетка, и отклик гуи приемлемый, то БЛ можно делать прямо в потоке ГУИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
БЛ - бизнес логика ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 21:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 22:13 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Сутки прошли. Профилактика закончилась. По теме. Докину несколько ссылок. 1) Возможно автору будет интересно: Тяпничная будущая мультипоточность 2) Доклад некого Куканова. Альтернативный взгляд на программирование мультипоточки. Не знаю будет ли применительно к материальному и аппаратному обеспечению автора... но к сведению. [spoiler] ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 01:09 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton 1) Возможно автору будет интересно: Тяпничная будущая мультипоточность ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 10:57 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton, Ну и еще одно соображение. Если тренд топика только теория, без подходов ЯП, то топик больше подходит в тему Разработка ИС. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 11:03 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton 1) Возможно автору будет интересно: Тяпничная будущая мультипоточность А как компилятор узнаёт в каком потоке код будет исполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 11:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav А как компилятор узнаёт в каком потоке код будет исполняться? Я исполнил его/их волю, засунул в поток, выполнил проект и получил деньги. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 11:58 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav А как компилятор узнаёт в каком потоке код будет исполняться? Я исполнил его/их волю, засунул в поток, выполнил проект и получил деньги. Узнай. Кстати, можно ссылку на проект? В магазине есть, надеюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:12 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Какой магазин, я же на работе. По поводу узнать, не интересно. Есть системный код и есть прикладной. На оба направления вас не хватит. Увы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:21 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton, Ну и еще одно соображение. Если тренд топика только теория, без подходов ЯП, то топик больше подходит в тему Разработка ИС. Не уверен. В разработку ИС можно говорить тогда когда есть техническое задание на целую ИС. А в топике мы обсуждаем кнопку Close. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:23 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton А в топике мы обсуждаем кнопку Close Кому она сдалась, эта кнопка. Против кнопок СВОИХ, внутри окна, есть всяческие решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:27 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Какой магазин, я же на работе. По поводу узнать, не интересно. Есть системный код и есть прикладной. На оба направления вас не хватит. Увы. Странно, что не интересно. Но видимо, это либо результат работы встроенного статического анализатора, который можно отключить. Либо приложение таки собралось, но этот вызов отказался работать будучи запущенным в основном потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:39 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Все профи на ветке андроид сказали что отключать проверку это не выход. Как бы у каждого ЯП свои правила. Насчет того что, в рантайме проверка или при компиляции я не помню. Давно было. Для рантайма там куча средств из коробки: авторЕсли ваш метод может быть вызван либо из основного (поток пользовательского интерфейса), либо из других потоков, вам нужна проверка, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 12:57 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Возможно они правильно делают что не рекомендуют. Но это скорее похоже не на мультипоточность а на контроль диспетчеризации сетевых евентов. Так работает JavaScript например. Малое число потоков (2-4) контролирует 200 открытых сетевых сокетов. Даже не сокетов а логических хендлеров которые обслуживают сетевую интеракцию веб-приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 13:00 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Возможно они правильно делают что не рекомендуют. В других ЯП больше свободы) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 13:06 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Возможно они правильно делают что не рекомендуют. Но это скорее похоже не на мультипоточность а на контроль диспетчеризации сетевых евентов. Так работает JavaScript например. Малое число потоков (2-4) контролирует 200 открытых сетевых сокетов. Даже не сокетов а логических хендлеров которые обслуживают сетевую интеракцию веб-приложения. Ну идеологически, конечно, правильнее запустить http-запрос в другом потоке или ожидание ответа. Вопрос в том сколько не очень качественного кода будет написано людьми, которые не слишком сильно задумываются как работает их приложение? Раз уж заговорили про сокеты. У меня вот вопрос: зачем спроектировали блокирующее чтение? Т.е. это должен быть другой поток. Это проблема с синхронизацией. И из этого потока проблемно выйти при необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 13:10 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Вопрос в том сколько не очень качественного кода будет написано людьми, которые не слишком сильно задумываются как работает их приложение? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 13:15 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Мне одному интересно в каком языке есть "вызов http" на уровне языка, а не библиотеки?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 13:50 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Вот открыл в Windows 7 Диспетчер задач, закладка "Быстродействие" - ползет график загрузки ЦПУ. Нажал клавишу <Ctrl> - и пока её удерживаю, приложение спит, график остановлен... Как страшно жить... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 14:05 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Мы этот вопрос еще не выясняли. d7i, d7i Как страшно жить... ))). Говорят, где то в поднебесной, один брокер заснул на клаве и купил ценных бумаг на много много нулей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 14:33 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpМы этот вопрос еще не выясняли. То есть вы не знаете на каком языке вы программировали. До чего техника дошла! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 14:44 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Технически, lisp, forth не различают уровни языка и библиотек. Поэтому в них - можно. Теоретически можно Nemerle, но я тут не уверен. Пускай знающие скажут. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 14:55 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton, Переведи его вопрос. Писал я на java, а говорил про компилятор и ide платформы андроид. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 15:55 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Я не спец в андроид. Но я понимаю мотивации плавного отказа от программирования на потоках в чистом виде. Главная проблема - отсутствие формального доказательства правоты solution. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 16:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Но я понимаю мотивации плавного отказа от программирования на потоках в чистом виде. С++ конечно другой язык. И у него другое предназначение. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 17:18 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpПисал я на java А можешь показать как выглядит в Java "вызов http", который "компилятор/IDE отказывается компилировать"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 17:25 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я же выше поправился. Ран тайм написал. В курсе что это такое? При запуске и вызове метода http будет райзе и падение приложения. Тоже не поверил? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 17:32 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpПри запуске и вызове метода http будет райзе и падение приложения. Тоже не поверил? Поверил. Я вообще способен поверить в то, что любое приложение любого автора может упасть. Но всё равно хочу видеть код, к этому приводящий, и точное сообщение об ошибке, включая (как это у Явы водится) стэк вызовов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 17:46 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Так бы и сказал. Поищу. Давно было. А то не поймешь, подкалываешь или интересуешься)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 18:12 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, добрался до компа. Вот некоторая часть инфы https://developer.android.com/reference/android/os/NetworkOnMainThreadException.html Исключение на уровне операционки. Отдельный поток обязателен ещё с анродида 3. То есть несколько лет. android.os.NetworkOnMainThreadException ЗЫ. Выключить можно парой строк для системы безопасности. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 22:41 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpИсключение на уровне операционки. Жаба и Ведроид. "Мы не смогли придумать API, которое бы не затыкалось, поэтому будем пристреливать ваши приложения пока вы не научитесь их писать так, как нам хочется." Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 23:04 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Они придумали. Пристреливают через 30 минут фоновые процессы (doze), а в основном потоке не дают ничего делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2019, 23:21 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
И в Win32Api, и в Gnome/GTK+ примерно одинаковая архитектура main-window/WndProc цикла. Основной поток - слушает события главного окна и диспетчеризирует их. Событий много. Особенно от мыши. Поэтому расчитывать на сколь-либо удачную архитектуру их обработки в этом цикле - так же наивно как и делать какую-то серъезную работу в JMS/MQ хендлере. Его задача - просто запутить поток обработки из пула доступных потоков. Уже как это будет реализовано. На потоках. На асинках. На акторах. Наверное и об этом топик. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 00:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
maytonИ в Win32Api, и в Gnome/GTK+ примерно одинаковая архитектура main-window/WndProc цикла. Да. И Win32 и Х протокол - выходцы из прошлого века, когда программирование считалось сложным занятием, а программы были простыми. Тогда перекладывать на прикладника обязанность крутить главный цикл выборки сообщений и следить за тем, чтобы их обработка не была слишком долгой - имело смысл. Программисты были умными. Но Ведроид-то - дитя этого века, когда программирование - занятие для школьников, а программы делают туеву хучу разных сложных вещей. Они там, в гугле, не могли самостоятельно крутить главный цикл под капотом RTL? Могли, благо прецедент есть в VCL. Но они не захотели. Они могли http и в/в функции API сделать сугубо асинхронными? Могли, ибо это безумно старая технология (я видел её ещё в RT-11). Но опять же не захотели. Или просто не додумались. О чём я, собственно, и сказал выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 01:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Может не в том разделе спрашиваю, но нет раздела Программирование под Windows. Много лет наблюдаю интересную картину. Если зажать и держать стандартную (на заголовке окна) кнопку "Закрыть окно", то перестаёт обновляться GUI. Вот запускаем банальный Notepad, зажимаем мышкой кнопку Закрыть и перестаёт мигать курсор. Почему? И какова механика наблюдаемого явления? PS: Погуглил слегка, но вроде ничего толкового не нашёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 07:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Могли, благо прецедент есть в VCL В дельфи VCL для прогера все тоже самое. Поток ГУИ и скласс Thread. В MS только революционно. Код: plaintext 1. 2. 3. 4.
Код просвистит мимо myFunction() не задерживаясь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 07:39 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Dimitry Sibiryakov Могли, благо прецедент есть в VCL В дельфи VCL для прогера все тоже самое. Поток ГУИ и скласс Thread. В MS только революционно. Код: plaintext 1. 2. 3. 4.
Код просвистит мимо myFunction() не задерживаясь. Я, конечно, в Шарпе не разбираюсь, но что же тут революционного? Это можно и на WinAPI / C++ сделать кучей разных способов. Это как я вижу синтаксический сахар для самой простой под-задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 10:24 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Это можно и на WinAPI Я тоже могу выше код ИЗ ОДНОЙ СТРОКИ написать в сто строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:12 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Ваша тема была про то что нехватает простой работы с UTF-8? А тут простая работа с потоками нужна? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:16 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика. Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания. То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее. Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке? Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:31 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav Это можно и на WinAPI Я тоже могу выше код ИЗ ОДНОЙ СТРОКИ написать в сто строк. Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться. В C++ поток тоже одной строчкой запускается. PetroNotC Sharp petrav, Ваша тема была про то что нехватает простой работы с UTF-8? А тут простая работа с потоками нужна? )) Конечно, у меня по предметной области куча сложной работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:44 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться. Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов? Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:52 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться. .... В шарпе это внутри потока Код: plaintext 1.
Думаю что мьютекс это слишком нижний уровень. Нужен Post message. В плюсах нет что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:53 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Конечно, у меня по предметной области куча сложной работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:54 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton petrav Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться. Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов? Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS. Есть много всего. Atomic, lock free алгоритмы (если не ошибаюсь), post message. Что такое CAS не знаю. Может ещё что-то есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 11:58 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Думаю что мьютекс это слишком нижний уровень. Нужен Post message. В плюсах нет что ли? В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:01 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav PetroNotC Sharp Думаю что мьютекс это слишком нижний уровень. Нужен Post message. В плюсах нет что ли? В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке. Шатает тебя сильно. Выше про сокеты начал спрашивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:03 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav пропущено... В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке. Шатает тебя сильно. Выше про сокеты начал спрашивать. В Qt ещё можно асинхронно из рабочего потока сигнал вызвать, а в потоке GUI обработать - потокобезопасно. Будет как у тебя в C#. Меня не шатает, у нас тема философская. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:06 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Там можно. Но ты же собирался только гуи в Qt. А сигналы это классы от Qt. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:09 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton petrav Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться. Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов? Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS. Между строк читается, что мьютекс -- это что-то deprecated и тру программеры им не пользуются. Я действительно не в курсе новомодных подходов в проектировании многопоточных приложений, но потому что я сильно сомневаюсь, что они упростят мне жизнь. Может пример не очень хороший. Но вот насколько я помню, в SQL правильно спроектированная БД + механизм транзакций позволяет вообще не думать, что сервер поддерживает огромное количество подключений. Есть небольшой набор правил и всё. Правда у меня это было очень давно. Вот если бы разработать такую библиотеку на С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:38 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Вот если бы разработать такую библиотеку на С++. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:52 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton ОС==ms-dos и IBM 286 не было мультипоточности ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 12:58 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
В виндовсе есть такая подсистема как I/O Completion Ports , которая позволяет параллелить ввод/вывод не выделяя по потоку на каждое соединение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:34 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Может не в том разделе спрашиваю, но нет раздела Программирование под Windows. Много лет наблюдаю интересную картину. Если зажать и держать стандартную (на заголовке окна) кнопку "Закрыть окно", то перестаёт обновляться GUI. Вот запускаем банальный Notepad, зажимаем мышкой кнопку Закрыть и перестаёт мигать курсор. Почему? И какова механика наблюдаемого явления? Там делается захват мыши и запускается модальный цикл обработки сообщений, в котором обрабатываются только сообщения мыши. Это всё кончается событием, когда ты отпускаешь клавишу мыши, и генерируется системное событие. Сообщение отрисовки (WM_PAINT) в Win "имеет низший приоритет" (в кавычках потому, что приоритетов у сообщений в WinAPI нет вообще, но именно это обладает низшим приоритетом), оно поступает в очередь сообщений только тогда, когда очередь пустая и хоть какая-то часть области окна инвалидирована (стёрта и требует перерисовки). Поэтому когда работает цикл обработки мыши над системной кнопкой закрытия, сообщение WM_PAINT даже и не генерируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 13:52 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dima TВ виндовсе есть такая подсистема как I/O Completion Ports которая позволяет параллелить ввод/вывод не выделяя по потоку на каждое соединение. Это старый артефакт со времён когда в ней многопоточность отсутствовала в принципе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:02 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Dima TВ виндовсе есть такая подсистема как I/O Completion Ports которая позволяет параллелить ввод/вывод не выделяя по потоку на каждое соединение. Это старый артефакт со времён когда в ней многопоточность отсутствовала в принципе. Не, ты его с чем-то перепутал, это в XP появилось https://docs.microsoft.com/en-us/windows/win32/fileio/createiocompletionport CreateIoCompletionPort function ... Minimum supported client Windows XP ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:07 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpВ дельфи VCL для прогера все тоже самое. Нет. Там есть принципиально революционное нововведение: главный цикл крутится "под капотом", а "наружу" торчат только вызовы методов классов. Для следующего качественного скачка остаётся только эти вызовы классы обработчиков грамотно спроектировать и вызывать их асинхронно чтобы главный цикл не тормозился. В гугле, когда проектировали своё API, это могли сделать, поскольку к тому моменту были уже и эта event-driven модель и многопоточность для поддержки асинхронных вызовов. Но не сделали. Обошлись костылями в виде исключения "вызов в неправильном потоке". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:20 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Нет. Там есть принципиально революционное нововведение: главный цикл крутится "под капотом", а "наружу" торчат только вызовы методов классов. Поэтому куд уж лучше? Если только в плюсах нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:29 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Веде идут. Класс главного окна конструктор. И потом хэндлеры или каллбэки событий клики. Message вообще нет ни в одном ЯП. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:31 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton ОС==ms-dos и IBM 286 не было мультипоточности Да возможно я ошибся в возможностях многозадачности 286. Я хотел подчеркнуть что были другие подходы. И они - работали. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:48 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Basil A. Sidorov пропущено... На Intel 80286 работали всяческие Xenix-ы и полуоси. И все они были многозадачными, а некоторые даже многопоточными. Да возможно я ошибся в возможностях многозадачности 286. Я хотел подчеркнуть что были другие подходы. И они - работали. Насколько я помню 286 не поддерживал вытесняющей многозадачности. Кооперативная многозадачность была. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:51 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC SharpПоэтому куд уж лучше? Именно туда, куда я и сказал: асинхронные вызовы обработчиков событий. Чтобы главный цикл не переставал крутиться пока они работают. petravНасколько я помню 286 не поддерживал вытесняющей многозадачности. Для вытесняющей многозадачности не слишком нужна аппаратная поддержка. Конечно, защищённый режим это приятно, как и команда на сохранение всех регистров, но ОСРВ вполне справлялась и без них. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:57 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Насколько я помню 286 не поддерживал вытесняющей многозадачности. Кооперативная многозадачность была. Windows версии 3.x или Novell до версии 4.x - кооперативная многозадачность. OS/2 или Windows NT - вытесняющая многозадачность. OS/2 версии 1.x работала на i80286. Хотя это был тот ещё квест из-за необходимости поддерживать DOS-приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 14:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Между строк читается, что мьютекс -- это что-то deprecated и тру программеры им не пользуются. Я действительно не в курсе новомодных подходов в проектировании многопоточных приложений, но потому что я сильно сомневаюсь, что они упростят мне жизнь. Может пример не очень хороший. Но вот насколько я помню, в SQL правильно спроектированная БД + механизм транзакций позволяет вообще не думать, что сервер поддерживает огромное количество подключений. Есть небольшой набор правил и всё. Правда у меня это было очень давно. Вот если бы разработать такую библиотеку на С++. Вместо mutex можешь использовать critical_section. Она - быстрее. Бенчмаркали где-то в sql.ru. В БД 99% проблем решаются за счёт изоляции транзакций. А изоляция - за счет версионности и блокировок. В последнее время версионности отдаётся больше приоритета. Блокировки уровня ОС тоже остаются но их время действия - минимизировано. И их назначение тоже другое. Ближе к защёлке страницы (page = 4k) для предотрващения несогласованным чтением другим процессом. По поводу того как создавать неблокирующие структуры данных в языках - это сложная тема. Но в качестве примера - можно например указать языки семейства ФП. В них 99% структур данных создаются - только для чтения. А модификация их - сводится к версионированию существующих. Тоесть например если вы создаете новый список на основе сцепления гловы и хвоста других списков - то их содержимое и суть - не меняется. Вы просто создаете в памяти еще одну ноду которая агрегирует голову и список. Пример. Код: plaintext 1. 2.
Так-же в лиспе. И так-же в Хаскелле. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 15:14 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Именно туда, куда я и сказал: асинхронные вызовы обработчиков событий. Чтобы главный цикл не переставал крутиться пока они работают. Минусы - 1) не везде асинхронность нужна, а тут все обработчики будут в фоне. 2) блокировка гуи HDC будет ругаться. "изменяем объект созданый в другом потоке" 3) в клиент сервере это особо не нужно. У меня в фоне 1% задачек. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 15:27 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton petrav Между строк читается, что мьютекс -- это что-то deprecated и тру программеры им не пользуются. Я действительно не в курсе новомодных подходов в проектировании многопоточных приложений, но потому что я сильно сомневаюсь, что они упростят мне жизнь. Может пример не очень хороший. Но вот насколько я помню, в SQL правильно спроектированная БД + механизм транзакций позволяет вообще не думать, что сервер поддерживает огромное количество подключений. Есть небольшой набор правил и всё. Правда у меня это было очень давно. Вот если бы разработать такую библиотеку на С++. Вместо mutex можешь использовать critical_section. Она - быстрее. Бенчмаркали где-то в sql.ru. В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно. mayton В БД 99% проблем решаются за счёт изоляции транзакций. А изоляция - за счет версионности и блокировок. В последнее время версионности отдаётся больше приоритета. Блокировки уровня ОС тоже остаются но их время действия - минимизировано. И их назначение тоже другое. Ближе к защёлке страницы (page = 4k) для предотрващения несогласованным чтением другим процессом. Неважно как оно реализовано внутри, важно что программист под SQL почти не задумывается о синхронизации данных. mayton По поводу того как создавать неблокирующие структуры данных в языках - это сложная тема. Но в качестве примера - можно например указать языки семейства ФП. В них 99% структур данных создаются - только для чтения. А модификация их - сводится к версионированию существующих. Тоесть например если вы создаете новый список на основе сцепления гловы и хвоста других списков - то их содержимое и суть - не меняется. Вы просто создаете в памяти еще одну ноду которая агрегирует голову и список. Пример. Код: plaintext 1. 2.
Так-же в лиспе. И так-же в Хаскелле. Что ж у вас у всех примеры такие детские... Вот уж не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 15:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно. Вот и сахар тебе не сладкий. И огурец тебе не солёный. Ты вообще не чем кодить-то собрался? У тебя - автоматизация мест под Windows. Ты сам оп этом писал. Так что-же теперь будем обсуждать Posix thread mutex? Нахрена терять время? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 16:07 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Жаль не могу найти посты Базиста с его базами. Там было сравнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2019, 16:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Мне одному интересно в каком языке есть "вызов http" на уровне языка, а не библиотеки?.. Вот еще в продолжение ветки. Вызов http на языке Node. По идее на асинках. Один процесс ноды - однопоточный. Вроде как концепция у них такая. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 17:06 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Не смог прочитать всю ветку. Если ещё не нашли истину, то (моя гипотеза): 1. Обработку NC (not client area) делается НЕ кодом приложения. Все скорее всего видели, как программы зависают, а неклиентская часть продолжает работать? Именно потому. 2. Курсор перестаёт мигать, потому что ушёл фокус с окна 2.1. Курсор начал мигать, потому что фокус вернулся 2.2. Если начать набирать ответ на sql.ru в форуме, а потом зажать кнопку close, смайлы слева будут продолжать плакать, смеяться и пучить глаза. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 10:19 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
фокус не переходит туда где нет handle окна. И потом выше пример был как "пролетая над гнездом кукушки"))) MouseMove тоже курсор замирал. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 10:53 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
CEMb Не смог прочитать всю ветку. Если ещё не нашли истину, то (моя гипотеза): CEMb 1. Обработку NC (not client area) делается НЕ кодом приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 21:15 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика. Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания. То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее. Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке? Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю. Ну я всё же предлагаю завершить мысль. Так что же изменилось в подходах к разработке по Вашему мнению? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 13:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav mayton Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика. Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания. То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее. Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке? Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю. Ну я всё же предлагаю завершить мысль. Так что же изменилось в подходах к разработке по Вашему мнению? Я основные свои тезисы описал здесь. https://www.sql.ru/forum/1303834/tyapnichnaya-budushhaya-multipotochnost ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 14:15 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
А изменилось - неудобное API для программирования простых действий на UI которые требуют фоновых вычислений. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 14:17 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Как я и сказал: программы стали умные, а программисты - простые. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 14:20 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Скорее идет эволюционный процесс отбрасывания помех. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 14:28 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton petrav В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно. Вот и сахар тебе не сладкий. И огурец тебе не солёный. Ты вообще не чем кодить-то собрался? У тебя - автоматизация мест под Windows. Ты сам оп этом писал. Так что-же теперь будем обсуждать Posix thread mutex? Нахрена терять время? Все разговаривают о чём-то своём. Товарищ PetroNotC Sharp начал продвигать мысль, что мьютекс -- это сложно, низкоуровнево и вообще не тру. Я начал с ним говорить в заданных им контексте и ключе. И ты тут вдруг такой выходишь с "оригинальной" мыслью: не нравится мьютекс -- используй критическую секцию! Но ведь это одно и тоже с точки зрения прикладного кода. Т.е. тут имеет место быть недопонимание. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:51 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Но ведь это одно и тоже с точки зрения прикладного кода. Т.е. тут имеет место быть недопонимание. Мой личный опыт (уж лет 18 назад) кодинга в Windows для тех сред (Windows2000/XP) показывает что критическая секция работает быстрее чем Mutex. Я только про это лишь говорил. Про скорость а не про юзкейсы или какие-то философские смыслы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:59 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Странный ты. Он дал ссылку. Сходи по ней и прочти стартовый пост. Дай комменты с цитатами оттуда. Там 9 пунктов и все разные. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 19:00 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
PetroNotC Sharp petrav, Странный ты. Он дал ссылку. Сходи по ней и прочти стартовый пост. Дай комменты с цитатами оттуда. Там 9 пунктов и все разные. Если я туда не иду, значит меня не заинтересовал тот мега пост о аж девяти пунктах. Возможно это странно, но уж как есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 19:04 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav, Да. Я понял. Системный уровень у вас получается. А тут вопрос на стыке.... Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 19:13 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
mayton petrav Но ведь это одно и тоже с точки зрения прикладного кода. Т.е. тут имеет место быть недопонимание. Мой личный опыт (уж лет 18 назад) кодинга в Windows для тех сред (Windows2000/XP) показывает что критическая секция работает быстрее чем Mutex. Я только про это лишь говорил. Про скорость а не про юзкейсы или какие-то философские смыслы. А контекст разговора был именно, что о use case и философии. Но возвращаясь к критической секции, мьютексе и WinApi (ведь критическая секция -- это WinApi). В контексте WinApi, насколько я знаю, мьютекс -- это инструмент межпроцессного взаимодействия. Т.е. это механизм блокировки между отдельными процессами/программами. Для взаимодействия между потоками рекомендуется критическая секция. Естественно она быстрее, потому что по началу реализует spin lock и не работает на уровне процессов. Но если вернуться в контекст std::mutex -- очень может быть, что реализация от MS, это та же самая критическая секция, которая реализует общепринятое понятие мьютекса, но не рекурсивного. Критическая секция в WinApi -- рекурсивная, std::mutex -- не рекурсивный. Так что возможно и в плане производительности совет-то твой спорный. Может быть std::mutex -- это CRITICAL_SECTION в MSVC. Я не знаю. PS: Конечно, возможны варианты типа того, что вызываем ::CreateMutex(), но там какой-то аргумент NULL и работает только на уровне данного процесса. Это не суть. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 19:31 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
CEMb Примерно так и есть. Не уверен, что реализация именно такая как написал MasterZiv на 5й странице, но суть думаю верная. Причем была разница в поведении винды, раньше было не так, и произошла если моя память не врет на одном из сервис паков ХР. Раньше если приложение зависало, зависала и его кнопка закрытия, а потом перестала. Изначально винда действительно была максимально невытесняюще многозадачная, как задумано, и при закрытии окна приложения оно получало сообщение WM_CLOSE, должно было на него реагировать, закрываться, и типа все хорошо. Но потихоньку стало расти число приложений, которые глючили и не закрывались по сообщению WM_CLOSE, или закрывались не сразу. И сначала в MS ввели таймер и появились сообщения "похоже, приложение перестало отвечать", но оказались недостатки и у этого решения, во-первых, тамаута и сообщения приходилось сравнительно долго ждать при зависании, а во-вторых кнопка закрытия продолжала быть зависшей вместе с приложением, и это некомильфо все видели. Поэтому еще позже и обработку NC вынесли из кода приложения, как минимум в части обработки этой кнопки закрытия, чтобы четче, быстрее реагировать на зависание. Ну и кнопка закрытия теперь в отличие от приложения продолжает работать, как и винда, что имиджевый плюс для MS. Сделав обработку нажатия кнопки закрытия в NC внешней, в MS получили возможность дополнительного реагирования в этой области, и в том числе, блокировать попадание входящих сообщений в очередь приложения, придерживая их в ядре; и не дожидаясь срабатывания таймаута, по которому устанавливалось зависание приложения, а сразу, при нажатии кнопки закрытия, т.е. до самого сигнала закрытия от юзера (отпускания кнопки). Именно поэтому, как я понимаю, пропадает реакция внутри окна, - пропадают входящие сообщения, на которые приложение реагирует, включая WM_TIMER. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 15:45 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
teo609 Сделав обработку нажатия кнопки закрытия в NC внешней, в MS получили возможность дополнительного реагирования в этой области ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 05:23 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
CEMb teo609 Сделав обработку нажатия кнопки закрытия в NC внешней, в MS получили возможность дополнительного реагирования в этой области Как я это себе представляю на основе того что видел и насколько помню. Стадия 1. Примерно c Windows 3.1, более ранних я не видел. Обработка кнопки закрытия в NC ведется в приложении, в DefWindowProc. В ней формируется сообщения WM_CLOSE, оно посылается в очередь сообщений, откуда забирается циклом сообщений, и в обработчике приложение должно красиво все закрыть и вызвать PostQuitMessage. Если что зависало ждать можно было полминуты, может и больше, не помню. Стадия 2. Примерно с Windows 98 (SE?). Обработка кнопки закрытия в NC остается в приложении, а снаружи навешивается таймер, который отслеживает попадание в очередь WM_CLOSE, и если прошло достаточно времени и приложение не завершило обработку WM_CLOSE, появляется запрос от системы "кажется, тут зависло, не срубить ли?". Вопрос появлялся емнип секунд через 10. В этих стадиях, если приложение зависало, то повторное нажатие на кнопку закрытия визуально ее не нажимало, она оставалась в верхнем положении, что соответствует зависанию в приложении, в его обработчике WM_CLOSE. Возможно где-то в конце жизни этой 2й стадии было дополнительное окно поверх и в тех же координататх, с целью получить другую кнопку закрытия, и получить от юзера сигнал нажатиями, что зависание никуда не делось. У меня в памяти эти окна сильно не отложились. Может эту фазу стоило бы оформить в списке как 3ю стадию, а то что у меня 3я как 4ю. Стадия 3. Примерно с ХР (SP?). Обработка кнопки закрытия в NC выносится из приложения, сообщение WM_CLOSE теперь формируется не в приложении, но посылается в него, таймаут сокращен до 5-6 секунд, кнопка закрытия, если нажимать повторно, визуально нажимается каждый раз. И теперь если ее нажимать часто, то даже до истечения таймаута можно раньше получить сообщение "похоже зависло". Окна-фантома нет. Т.е. это то как сейчас, по крайней мере я такого окна давно уже не видел. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2019, 11:19 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
petrav Неважно как оно реализовано внутри, важно что программист под SQL почти не задумывается о синхронизации данных. Вот и возьмите функциональный язык. Например, пишите на хаскеле, всё будет из каропки правда, как освоите как сделать простейшие действия ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2019, 14:12 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
Что-то топик переродился в разговор обо всём и ни о чём, так мне кажется. Думаю, пора закрывать эту лавочку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 11:27 |
|
MS Windows: кнопка Close блокирует GUI
|
|||
---|---|---|---|
#18+
MasterZiv, Она изначально была такая. Кому интересна кнопочка закрытия окна. Закрывает и ладно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 13:31 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017494]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
137ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 485ms |
0 / 0 |