|
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 |
|
|
start [/forum/topic.php?fid=57&msg=39903569&tid=2017494]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 134ms |
0 / 0 |