powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Windows: кнопка Close блокирует GUI
25 сообщений из 156, страница 5 из 7
MS Windows: кнопка Close блокирует GUI
    #39903268
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Может не в том разделе спрашиваю, но нет раздела Программирование под Windows.

Много лет наблюдаю интересную картину. Если зажать и держать стандартную (на заголовке окна) кнопку "Закрыть окно", то перестаёт обновляться GUI. Вот запускаем банальный Notepad, зажимаем мышкой кнопку Закрыть и перестаёт мигать курсор.

Почему? И какова механика наблюдаемого явления?

PS: Погуглил слегка, но вроде ничего толкового не нашёл.
https://stackoverflow.com/q/18041622/9585016
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903271
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Могли, благо прецедент есть в VCL
нет прецендента окромя MS с async.
В дельфи VCL для прогера все тоже самое. Поток ГУИ и скласс Thread.
В MS только революционно.
Код: plaintext
1.
2.
3.
4.
.... 
await myFunction() //на 3 часа обработки
.... 
... 


Код просвистит мимо myFunction() не задерживаясь.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903301
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Dimitry Sibiryakov
Могли, благо прецедент есть в VCL
нет прецендента окромя MS с async.
В дельфи VCL для прогера все тоже самое. Поток ГУИ и скласс Thread.
В MS только революционно.
Код: plaintext
1.
2.
3.
4.
.... 
await myFunction() //на 3 часа обработки
.... 
... 


Код просвистит мимо myFunction() не задерживаясь.

Я, конечно, в Шарпе не разбираюсь, но что же тут революционного? Это можно и на WinAPI / C++ сделать кучей разных способов. Это как я вижу синтаксический сахар для самой простой под-задачи.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903315
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Это можно и на WinAPI
вы не читали выше что я писал. MS было недовольно что прогеры обращаясь напрямую к потоку, семафорам, мьютексам, часто делали ошибки и утечки памяти.
Я тоже могу выше код ИЗ ОДНОЙ СТРОКИ написать в сто строк.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903317
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Ваша тема была про то что нехватает простой работы с UTF-8?
А тут простая работа с потоками нужна?
))
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903326
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте дам лирическое отступление. Когда-то давно когда деревья были зеленые
и ОС==ms-dos и IBM 286 не было мультипоточности. Был 1 процессор и была однопроцессная
модель приложений. Правда были прерывания (IRQ(interrupt request)). Кстати перевод неправильный. Или семантика.
Мы под ними подразумевали хендлер прерываний. Например юзер подвигал мышь. Или диск закончил читать
сектор и в этот момент ваше приложение морозилось. И передавало управление хедлеру соотв. прерывания.
То в свою очередь быстро (!) отрабатывало и отдавало управление вашему приложению. Это создавало
иллюзию мультизадачной работы с периферией. Модемы. Дисководы. Сидюки и прочее.

Давайте просто подумаем и пофантазируем что с того времени измнилось в подходах к разработке?
Что стало лучше и хуже? Я сам не дам ответ на вопрос потомучто я пока еще не знаю.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903330
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
Это можно и на WinAPI
вы не читали выше что я писал. MS было недовольно что прогеры обращаясь напрямую к потоку, семафорам, мьютексам , часто делали ошибки и утечки памяти.
Я тоже могу выше код ИЗ ОДНОЙ СТРОКИ написать в сто строк.

Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться.

В C++ поток тоже одной строчкой запускается.

PetroNotC Sharp
petrav,
Ваша тема была про то что нехватает простой работы с UTF-8?
А тут простая работа с потоками нужна?
))

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

Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться.

Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов?
Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903335
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться.
вот этот топик бы и завел. Он интереснее и практичнее.
....
В шарпе это внутри потока
Код: plaintext
1.
Action action = () => метод_в_гуи(this, e)


Думаю что мьютекс это слишком нижний уровень.
Нужен Post message.
В плюсах нет что ли?
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903338
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Конечно, у меня по предметной области куча сложной работы.
не выделяй GUI и на 50% меньше станет.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903341
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться.

Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов?
Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS.

Есть много всего. Atomic, lock free алгоритмы (если не ошибаюсь), post message. Что такое CAS не знаю. Может ещё что-то есть.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903344
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Думаю что мьютекс это слишком нижний уровень.
Нужен Post message.
В плюсах нет что ли?

В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903347
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
PetroNotC Sharp

Думаю что мьютекс это слишком нижний уровень.
Нужен Post message.
В плюсах нет что ли?

В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке.
осталось сказать, закрывай тему и открывай Post message тему.
Шатает тебя сильно.
Выше про сокеты начал спрашивать.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903348
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
пропущено...

В плюсах не встречал. Но я не очень в курсе того что они в 17 навернули. Post message есть в WinApi и Qt, да наверное в любой GUI библиотеке.
осталось сказать, закрывай тему и открывай Post message тему.
Шатает тебя сильно.
Выше про сокеты начал спрашивать.

В Qt ещё можно асинхронно из рабочего потока сигнал вызвать, а в потоке GUI обработать - потокобезопасно. Будет как у тебя в C#.

Меня не шатает, у нас тема философская.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903350
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Там можно. Но ты же собирался только гуи в Qt.
А сигналы это классы от Qt.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903373
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav

Допустим я запустил этот await на три часа работы. Но часть данных этого потока мне нужно отображать на GUI, раз в 30-сек. Как же мне их получить без мьютекса? И это самое простое что может понадобиться.

Ты прикалываешся? Ты действительно не знаешь как работать без мьютексов?
Есть большое количество других способов снимать сведенья с потоков. Есть атомарные операции. CAS.

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

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

Вот если бы разработать такую библиотеку на С++.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903383
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вот если бы разработать такую библиотеку на С++.
тогда нужно забыть о прикладной задаче - разработать ИС ххххххххж.
Удачи!
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903389
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
ОС==ms-dos и IBM 286 не было мультипоточности
На Intel 80286 работали всяческие Xenix-ы и полуоси. И все они были многозадачными, а некоторые даже многопоточными.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903415
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В виндовсе есть такая подсистема как I/O Completion Ports , которая позволяет параллелить ввод/вывод не выделяя по потоку на каждое соединение.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903435
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Может не в том разделе спрашиваю, но нет раздела Программирование под Windows.

Много лет наблюдаю интересную картину. Если зажать и держать стандартную (на заголовке окна) кнопку "Закрыть окно", то перестаёт обновляться GUI. Вот запускаем банальный Notepad, зажимаем мышкой кнопку Закрыть и перестаёт мигать курсор.

Почему? И какова механика наблюдаемого явления?



Там делается захват мыши и запускается модальный цикл обработки сообщений, в котором обрабатываются только
сообщения мыши. Это всё кончается событием, когда ты отпускаешь клавишу мыши, и генерируется системное событие.

Сообщение отрисовки (WM_PAINT) в Win "имеет низший приоритет" (в кавычках потому, что приоритетов у сообщений в WinAPI нет вообще, но именно это обладает низшим приоритетом), оно поступает в очередь сообщений только тогда, когда очередь пустая и хоть какая-то часть области окна инвалидирована (стёрта и требует перерисовки).

Поэтому когда работает цикл обработки мыши над системной кнопкой закрытия, сообщение WM_PAINT даже и не генерируется.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903447
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ виндовсе есть такая подсистема как I/O Completion Ports которая позволяет параллелить
ввод/вывод не выделяя по потоку на каждое соединение.

Это старый артефакт со времён когда в ней многопоточность отсутствовала в принципе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903455
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903471
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpВ дельфи VCL для прогера все тоже самое.

Нет. Там есть принципиально революционное нововведение: главный цикл крутится "под
капотом", а "наружу" торчат только вызовы методов классов. Для следующего качественного
скачка остаётся только эти вызовы классы обработчиков грамотно спроектировать и вызывать
их асинхронно чтобы главный цикл не тормозился. В гугле, когда проектировали своё API, это
могли сделать, поскольку к тому моменту были уже и эта event-driven модель и
многопоточность для поддержки асинхронных вызовов. Но не сделали. Обошлись костылями в
виде исключения "вызов в неправильном потоке".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903477
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Нет. Там есть принципиально революционное нововведение: главный цикл крутится "под
капотом", а "наружу" торчат только вызовы методов классов.
да уже везде под капотом и не видно главный цикл обработки окна. Даже тут в Qt.
Поэтому куд уж лучше? Если только в плюсах нету.
...
Рейтинг: 0 / 0
MS Windows: кнопка Close блокирует GUI
    #39903479
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Веде идут.
Класс главного окна конструктор.
И потом хэндлеры или каллбэки событий клики.
Message вообще нет ни в одном ЯП.
...
Рейтинг: 0 / 0
25 сообщений из 156, страница 5 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / MS Windows: кнопка Close блокирует GUI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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