|
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 |
|
|
start [/forum/topic.php?fid=57&msg=39903373&tid=2017494]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 420ms |
0 / 0 |