Наблюдатели за буфером обмена - что будет, если один из них падает?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.10.13 12:04
Оценка:
Здравствуйте!

В своем приложении я устанавливаю мониторинг буфера обмена по SetClipboardViewer. Мне возвращают HWND окна, которому я должен по цепочке передавать сообщения буфера — SendMessage(hwndNextClipboardViewer, uMsg, wParam, lParam);
Заметил вот что — иногда, когда ворд запускаю, он, бывает, падает, при этом в моей программе вылетает ASSERT, что hwndNextClipboardViewer не валидный оконный хэндл. Проверить валидность-то я могу, но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы? Если так, то как-то грустно ;(
Маньяк Робокряк колесит по городу
Re: Наблюдатели за буфером обмена - что будет, если один из них падает?
От: ononim  
Дата: 20.10.13 13:15
Оценка: 38 (6)
M> Заметил вот что — иногда, когда ворд запускаю, он, бывает, падает, при этом в моей программе вылетает ASSERT, что hwndNextClipboardViewer не валидный оконный хэндл. Проверить валидность-то я могу, но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы? Если так, то как-то грустно ;(
Последний раз когда я с этой штукой работал — действительно было грустно. Потому мелкософт изобрел новые велосипеды, с более круглыми колесами.
Как много веселых ребят, и все делают велосипед...
Re: Наблюдатели за буфером обмена - что будет, если один из них падает?
От: sergeyt4  
Дата: 20.10.13 18:49
Оценка:
Здравствуйте, Marty, Вы писали:

M> но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы?


Именно так!

Но всякие хитрые программы (типа тех же ворд/ексель/и.т.д) не отчаиваются, а просто регистрируют себя еще раз, если обнаружат, что цепочка обработчиков развалилась. Иногда, правда, они это делают как-то криво...
Re[2]: Наблюдатели за буфером обмена - что будет, если один из них падает?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.10.13 18:57
Оценка:
Здравствуйте, ononim, Вы писали:

O>Последний раз когда я с этой штукой работал — действительно было грустно. Потому мелкософт изобрел новые велосипеды, с более круглыми колесами.


Хм, действительно, колеса немного круглее
Маньяк Робокряк колесит по городу
Re[2]: Наблюдатели за буфером обмена - что будет, если один из них падает?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.10.13 18:58
Оценка:
Здравствуйте, sergeyt4, Вы писали:

M>> но получается, что если один из цепочки наблюдателей вылетел, то все последующие наблюдатели отваливаются до перезагрузки/перелогона системы?


S>Именно так!


S>Но всякие хитрые программы (типа тех же ворд/ексель/и.т.д) не отчаиваются, а просто регистрируют себя еще раз, если обнаружат, что цепочка обработчиков развалилась. Иногда, правда, они это делают как-то криво...


Так вроде же не определить, что отвалилось где-то раньше по цепочке. Определяется, что отвалился следующий наблюдатель, но в этом случае для своего приложения проблем-то нет.
Маньяк Робокряк колесит по городу
Re[3]: Наблюдатели за буфером обмена - что будет, если один из них падает?
От: Aniskin  
Дата: 21.10.13 09:31
Оценка:
Здравствуйте, Marty, Вы писали:

M>Так вроде же не определить, что отвалилось где-то раньше по цепочке. Определяется, что отвалился следующий наблюдатель, но в этом случае для своего приложения проблем-то нет.


Ворду и подобным программа проще. Пользователи периодически что-то копируют в буфер обмена в самом Ворде. И Ворд может просто проверить, пришло ли ему уведомление о смене содержимого буфера обмена после операции копирования, если не пришло, то кто-то отвалился и пора себя перерегистрировать.