powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Windows: кнопка Close блокирует GUI
25 сообщений из 156, страница 6 из 7
MS Windows: кнопка Close блокирует GUI
    #39903491
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
mayton
ОС==ms-dos и IBM 286 не было мультипоточности
На Intel 80286 работали всяческие Xenix-ы и полуоси. И все они были многозадачными, а некоторые даже многопоточными.

Да возможно я ошибся в возможностях многозадачности 286.

Я хотел подчеркнуть что были другие подходы. И они - работали.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903495
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Basil A. Sidorov
пропущено...
На Intel 80286 работали всяческие Xenix-ы и полуоси. И все они были многозадачными, а некоторые даже многопоточными.

Да возможно я ошибся в возможностях многозадачности 286.

Я хотел подчеркнуть что были другие подходы. И они - работали.

Насколько я помню 286 не поддерживал вытесняющей многозадачности. Кооперативная многозадачность была.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903504
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpПоэтому куд уж лучше?

Именно туда, куда я и сказал: асинхронные вызовы обработчиков событий. Чтобы главный цикл
не переставал крутиться пока они работают.

petravНасколько я помню 286 не поддерживал вытесняющей многозадачности.

Для вытесняющей многозадачности не слишком нужна аппаратная поддержка. Конечно, защищённый
режим это приятно, как и команда на сохранение всех регистров, но ОСРВ вполне справлялась
и без них.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903508
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Насколько я помню 286 не поддерживал вытесняющей многозадачности. Кооперативная многозадачность была.
Кооперативная или вытесняющая - свойство планировщика.
Windows версии 3.x или Novell до версии 4.x - кооперативная многозадачность.
OS/2 или Windows NT - вытесняющая многозадачность.
OS/2 версии 1.x работала на i80286. Хотя это был тот ещё квест из-за необходимости поддерживать DOS-приложения.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903528
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Между строк читается, что мьютекс -- это что-то deprecated и тру программеры им не пользуются. Я действительно не в курсе новомодных подходов в проектировании многопоточных приложений, но потому что я сильно сомневаюсь, что они упростят мне жизнь.

Может пример не очень хороший. Но вот насколько я помню, в SQL правильно спроектированная БД + механизм транзакций позволяет вообще не думать, что сервер поддерживает огромное количество подключений. Есть небольшой набор правил и всё. Правда у меня это было очень давно.

Вот если бы разработать такую библиотеку на С++.

Вместо mutex можешь использовать critical_section. Она - быстрее. Бенчмаркали где-то в sql.ru.

В БД 99% проблем решаются за счёт изоляции транзакций. А изоляция - за счет версионности
и блокировок. В последнее время версионности отдаётся больше приоритета. Блокировки уровня ОС
тоже остаются но их время действия - минимизировано. И их назначение тоже другое.
Ближе к защёлке страницы (page = 4k) для предотрващения несогласованным чтением другим процессом.

По поводу того как создавать неблокирующие структуры данных в языках - это сложная тема.
Но в качестве примера - можно например указать языки семейства ФП. В них 99% структур данных
создаются - только для чтения. А модификация их - сводится к версионированию существующих.
Тоесть например если вы создаете новый список на основе сцепления гловы и хвоста других
списков - то их содержимое и суть - не меняется. Вы просто создаете в памяти еще одну ноду
которая агрегирует голову и список. Пример.
Код: plaintext
1.
2.
scala> 1 :: List(2,3,4)
res0: List[Int] = List(1, 2, 3, 4)


Так-же в лиспе. И так-же в Хаскелле.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903539
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Именно туда, куда я и сказал: асинхронные вызовы обработчиков событий. Чтобы главный цикл
не переставал крутиться пока они работают.
тогда дельфи получится.
Минусы - 1) не везде асинхронность нужна, а тут все обработчики будут в фоне.
2) блокировка гуи HDC будет ругаться. "изменяем объект созданый в другом потоке"
3) в клиент сервере это особо не нужно.
У меня в фоне 1% задачек.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903569
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Между строк читается, что мьютекс -- это что-то deprecated и тру программеры им не пользуются. Я действительно не в курсе новомодных подходов в проектировании многопоточных приложений, но потому что я сильно сомневаюсь, что они упростят мне жизнь.

Может пример не очень хороший. Но вот насколько я помню, в SQL правильно спроектированная БД + механизм транзакций позволяет вообще не думать, что сервер поддерживает огромное количество подключений. Есть небольшой набор правил и всё. Правда у меня это было очень давно.

Вот если бы разработать такую библиотеку на С++.

Вместо mutex можешь использовать critical_section. Она - быстрее. Бенчмаркали где-то в sql.ru.

В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно.

mayton
В БД 99% проблем решаются за счёт изоляции транзакций. А изоляция - за счет версионности
и блокировок. В последнее время версионности отдаётся больше приоритета. Блокировки уровня ОС
тоже остаются но их время действия - минимизировано. И их назначение тоже другое.
Ближе к защёлке страницы (page = 4k) для предотрващения несогласованным чтением другим процессом.

Неважно как оно реализовано внутри, важно что программист под SQL почти не задумывается о синхронизации данных.

mayton
По поводу того как создавать неблокирующие структуры данных в языках - это сложная тема.
Но в качестве примера - можно например указать языки семейства ФП. В них 99% структур данных
создаются - только для чтения. А модификация их - сводится к версионированию существующих.
Тоесть например если вы создаете новый список на основе сцепления гловы и хвоста других
списков - то их содержимое и суть - не меняется. Вы просто создаете в памяти еще одну ноду
которая агрегирует голову и список. Пример.
Код: plaintext
1.
2.
scala> 1 :: List(2,3,4)
res0: List[Int] = List(1, 2, 3, 4)


Так-же в лиспе. И так-же в Хаскелле.

Что ж у вас у всех примеры такие детские... Вот уж не знаю.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903572
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно.

Вот и сахар тебе не сладкий. И огурец тебе не солёный.
Ты вообще не чем кодить-то собрался? У тебя - автоматизация мест под Windows. Ты сам оп этом писал.
Так что-же теперь будем обсуждать Posix thread mutex? Нахрена терять время?
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903582
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль не могу найти посты Базиста с его базами. Там было сравнение.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39904221
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Мне одному интересно в каком языке есть "вызов http" на уровне языка, а не библиотеки?..

Вот еще в продолжение ветки.

Вызов http на языке Node. По идее на асинках. Один процесс ноды - однопоточный. Вроде как концепция у них такая.

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
http.get({
  hostname: 'localhost',
  port: 80,
  path: '/',
  agent: false  // Create a new agent just for this one request
}, (res) => {
  // Do stuff with response
});
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39904518
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смог прочитать всю ветку. Если ещё не нашли истину, то (моя гипотеза):

1. Обработку NC (not client area) делается НЕ кодом приложения. Все скорее всего видели, как программы зависают, а неклиентская часть продолжает работать? Именно потому.
2. Курсор перестаёт мигать, потому что ушёл фокус с окна

2.1. Курсор начал мигать, потому что фокус вернулся

2.2. Если начать набирать ответ на sql.ru в форуме, а потом зажать кнопку close, смайлы слева будут продолжать плакать, смеяться и пучить глаза.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39904541
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb
Курсор перестаёт мигать, потому что ушёл фокус с окна
фокус не переходит туда где нет handle окна.
И потом выше пример был как "пролетая над гнездом кукушки"))) MouseMove тоже курсор замирал.
))
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905084
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb
Не смог прочитать всю ветку. Если ещё не нашли истину, то (моя гипотеза):
Нашли. https://stackoverflow.com/q/18041622/9585016
CEMb
1. Обработку NC (not client area) делается НЕ кодом приложения.
Да. DefWindowProc в цикле ждёт события отжатия кнопки мыши и не возвращает контроль вызвавшей стороне пока этого не произошло.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905534
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые
и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная
модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика.
Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать
сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания.
То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало
иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее.

Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке?
Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю.

Ну я всё же предлагаю завершить мысль. Так что же изменилось в подходах к разработке по Вашему мнению?
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905553
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые
и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная
модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика.
Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать
сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания.
То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало
иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее.

Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке?
Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю.

Ну я всё же предлагаю завершить мысль. Так что же изменилось в подходах к разработке по Вашему мнению?

Я основные свои тезисы описал здесь.
https://www.sql.ru/forum/1303834/tyapnichnaya-budushhaya-multipotochnost
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905556
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А изменилось - неудобное API для программирования простых действий на UI которые требуют фоновых вычислений.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905557
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я и сказал: программы стали умные, а программисты - простые.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39905567
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее идет эволюционный процесс отбрасывания помех.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906330
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

В С++ нет critical_section. Она есть в WinApi, по началу делает SpinLock некоторое количество раз, потом при неудаче переходит к системному вызову блокировки мьютекса. Но Вы, я вижу, упустили о чём идёт речь. С точки зрения программиста что критическая секция, что мьютекс - одно и тоже в плане написания качественного кода. Это часто очень сложно.

Вот и сахар тебе не сладкий. И огурец тебе не солёный.
Ты вообще не чем кодить-то собрался? У тебя - автоматизация мест под Windows. Ты сам оп этом писал.
Так что-же теперь будем обсуждать Posix thread mutex? Нахрена терять время?

Все разговаривают о чём-то своём. Товарищ PetroNotC Sharp начал продвигать мысль, что мьютекс -- это сложно, низкоуровнево и вообще не тру. Я начал с ним говорить в заданных им контексте и ключе. И ты тут вдруг такой выходишь с "оригинальной" мыслью: не нравится мьютекс -- используй критическую секцию! Но ведь это одно и тоже с точки зрения прикладного кода. Т.е. тут имеет место быть недопонимание.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906334
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Но ведь это одно и тоже с точки зрения прикладного кода. Т.е. тут имеет место быть недопонимание.

Мой личный опыт (уж лет 18 назад) кодинга в Windows для тех сред (Windows2000/XP) показывает что критическая секция
работает быстрее чем Mutex.

Я только про это лишь говорил. Про скорость а не про юзкейсы или какие-то философские смыслы.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906335
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Странный ты. Он дал ссылку. Сходи по ней и прочти стартовый пост.
Дай комменты с цитатами оттуда.
Там 9 пунктов и все разные.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906336
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Странный ты. Он дал ссылку. Сходи по ней и прочти стартовый пост.
Дай комменты с цитатами оттуда.
Там 9 пунктов и все разные.

Если я туда не иду, значит меня не заинтересовал тот мега пост о аж девяти пунктах. Возможно это странно, но уж как есть.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906342
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Да. Я понял. Системный уровень у вас получается.
А тут вопрос на стыке....
Удачи!
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39906350
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 и работает только на уровне данного процесса. Это не суть.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39907088
teo609
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CEMb
Если ещё не нашли истину, то (моя гипотеза):

1. Обработку NC (not client area) делается НЕ кодом приложения. Все скорее всего видели, как программы зависают, а неклиентская часть продолжает работать? Именно потому.


Примерно так и есть. Не уверен, что реализация именно такая как написал MasterZiv на 5й странице, но суть думаю верная.

Причем была разница в поведении винды, раньше было не так, и произошла если моя память не врет на одном из сервис паков ХР. Раньше если приложение зависало, зависала и его кнопка закрытия, а потом перестала.
Изначально винда действительно была максимально невытесняюще многозадачная, как задумано, и при закрытии окна приложения оно получало сообщение WM_CLOSE, должно было на него реагировать, закрываться, и типа все хорошо. Но потихоньку стало расти число приложений, которые глючили и не закрывались по сообщению WM_CLOSE, или закрывались не сразу. И сначала в MS ввели таймер и появились сообщения "похоже, приложение перестало отвечать", но оказались недостатки и у этого решения, во-первых, тамаута и сообщения приходилось сравнительно долго ждать при зависании, а во-вторых кнопка закрытия продолжала быть зависшей вместе с приложением, и это некомильфо все видели. Поэтому еще позже и обработку NC вынесли из кода приложения, как минимум в части обработки этой кнопки закрытия, чтобы четче, быстрее реагировать на зависание. Ну и кнопка закрытия теперь в отличие от приложения продолжает работать, как и винда, что имиджевый плюс для MS.

Сделав обработку нажатия кнопки закрытия в NC внешней, в MS получили возможность дополнительного реагирования в этой области, и в том числе, блокировать попадание входящих сообщений в очередь приложения, придерживая их в ядре; и не дожидаясь срабатывания таймаута, по которому устанавливалось зависание приложения, а сразу, при нажатии кнопки закрытия, т.е. до самого сигнала закрытия от юзера (отпускания кнопки). Именно поэтому, как я понимаю, пропадает реакция внутри окна, - пропадают входящие сообщения, на которые приложение реагирует, включая WM_TIMER.
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 6 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Windows: кнопка Close блокирует GUI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]