|
|
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
Вроде ничего не курю дурацкий вопрос я бы сказал бредовый, но вдруг есть что-то чего я не знаю в надежде на фантастику в общем ))) Попробую сформулировать. Все знают о триггерах СУБД, и как они работают, понятно, что это оболчка/программа (сама СУБД)... Но представим, что у нас есть переменная типа string в программе на клиенте. задали ей некое значение. например 'rrrrrrrrrrrrrrrrrrrrrrrrrrrrr' по сути строка представляет собой набор флагов, но флагов не типа да/нет, а как видим они могут иметь разные значения... Далее, допустим сделали replace каких-то символов получилась строка 'rrrrrrrrwrrrrrrtrrrrrryrrrrrr'. По идее, когда пишу программу, конечно могу предусмотреть нужный мне код и до replace и после replace... НО Есть ли возможность быть может на самом низком уровне просто как-то отслеживать факт изменения данных в данном случае именно нжных мне байт и автоматом вызывать изменение других, связанных с этими данными данных? Другими словами возможно ли создание типа данных, который бы имел внутри себя, связанные определенным образом подтипы данных? Пока формулировал вопрос, пришел к мысли, что я хочу спросить типа, а есть такое понятие как классы )))) Блин... Хорошо вернусь к строке в примере... Могу ли я на аппаратном уровне отловить момент, что мол изменился 3-й байт строки или хотя бы вообще, что строка изменилась? И задать событие, что мол если он изменился, то вызываем изменение других данных... Такое ощущение, что если это и можно сделать, то в другом потоке наверно... Возможно, еще более точно: не хочется тратить время на проверку, какие именно байты изменились и как изменились. Хотелось бы просто поставить как бы на системном уровне триггер, в котором сказать, что если это поменялось, то пересчитываем вот эту переменную (вызываем функцию/процедуру) Бред в общем какой-то, но может, если есть что-то такое, кто в курсе скажет, а так если что тему можно убить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 23:27:37 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
Если термин переменная заменить на property , то решение становится довольно тривиальным. Но ты, очевидно не ищешь легких решений или преследуешь какие-то посторонние цели. Какие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 23:46:09 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
maytonЕсли термин переменная заменить на property , то решение становится довольно тривиальным. Но ты, очевидно не ищешь легких решений или преследуешь какие-то посторонние цели. Какие? Ну ты mayton, даёшь! Я вот, отмечая Старый Новый Год, прочитал пост левым лазом - не понял. Попробовал правым - та же фигня. Очень много буков для праздничного настроения. Поздравляю всех с Новым Годом! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 00:20:45 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
maytonЕсли термин переменная заменить на property, то решение становится довольно тривиальным. Да. Именно об этом и хтел спросить. :) Как не стыдно признаться, но все-таки придется мне поизучать как создавать свои классы, похоже ) Да! С Новым Годом! Урааа! ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 00:28:21 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
ТравянойКак не стыдно признаться, но все-таки придется мне поизучать как создавать свои классы, похоже ) Да! С Новым Годом! Урааа! ) Не спеши. Язык-то какой используешь? P.S. Учиться никогда не стыдно. P.P.S. С Новым Годом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:02:58 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
ShSergeЯ вот, отмечая Старый Новый Год, прочитал пост левым лазом - не понял. Попробовал правым - та же фигня. Очень много буков для праздничного настроения. Поздравляю всех с Новым Годом! :) Для того чтобы понять суть проблемы - необязательно читать все буквы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 10:04:24 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
На аппаратном уровне это называется аппаратными прерываниями. Скажем, если пользователь щелкает мышью, то ЭВМ прерывает свою работу и где-то у себя в памяти сохраняет информацию о произошедшем событии. Если никто этой информацией не заинтересуется (не обработает её, не залезет в эту область памяти и не прочитает её), то она пропадет. Т.е. обработку события прерывания должен предусматривать программист в главном цикле своей программы (если это событие ему интересно). Переменная же, без ведома программиста, не может сама измениться (аппаратно). А значит, программист тут же, после её изменения, может предусмотреть нужные ему действия и проверки. Не забывайте, что программа выполняется строго последовательно: оператор за оператором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:24:24 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
ТравянойНе спеши. Язык-то какой используешь? Delphi и в основном процедурно :) - даже свои типы данных редко использую, практически никогда не использую, нет необходимости... А тут назрела такая вот необходимость ибо если определенные кишки засунуть в некий класс, создать свои объекты, то потом писать и редактировать, оперируя свойствами и методами этих объектов как бы кирпичиков имхо будет проще, хотя не знаю, не пробовал, может и нет большой разницы, что класс, что вызывать руками процедуры... Еще есть сомнения по поводу быстродействия программы с использованием своих объектов со свойствами и методами vs без использования этих объектов, а все тупо на процедурах по идее, разницы быть тоже не должно, но не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:37:04 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
ТравянойЕще есть сомнения по поводу быстродействия программы с использованием своих объектов со свойствами и методами vs без использования этих объектов, а все тупо на процедурах по идее, разницы быть тоже не должно, но не уверен. Отбрось сомнения. Если ты даже написал код, который мильён раз в секунду дёргает виртуальную функцию, и заметишь на этом просадку в производительности - еще лучше. Будет повод пересмотреть архитектуру и совместить вызывающий код и вызываемый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:44:53 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
TamozhnyaПеременная же, без ведома программиста, не может сама измениться (аппаратно). А значит, программист тут же, после её изменения, может предусмотреть нужные ему действия и проверки. Не забывайте, что программа выполняется строго последовательно: оператор за оператором.У меня такое ощущение будто я очень резко попал в далёкие 1980-е.... Впрочем это офф. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 11:48:59 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
maytonУ меня такое ощущение будто я очень резко попал в далёкие 1980-е.... Просто подумал, вдруг с того времени что-то изменилось, а я не в курсе ))) Ну ясно тему, можно закрыть/убить. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:01:00 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
mayton, :) А Вы полагаете, что сейчас процессоры стали другие, и выполняют команды в произвольном порядке? Или исходя из своих предпочтений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:01:33 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
TamozhnyaА Вы полагаете, что сейчас процессоры стали другие, и выполняют команды в произвольном порядке? Или исходя из своих предпочтений? Извините. Просто моя привычка обобщать любую даже самую простую задачку... Короче говоря я думал о shared memory. Возможно автор искал простой вариант мониторинга изменений даже не ПЕРЕМЕННОЙ а ячейки памяти под воздействием другого процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:08:51 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
mayton, Если пользователь вводит данные в поле, то сохранение вводимых данных во внутренних структурах, а также перерисовка их на экране обеспечивается кодом объекта TextBox, который запускается в бесконечном цикле ReadEvents в определённое время. Тут же прикладному программисту позволено вставить некоторый свой код (например OnKeyDown), где он может проверять эти сохранённые данные. Если же некоторая программа типа Magic Traner Creator тупо изменила вам данные в ячейках памяти, то узнать об этом вы никак не сможете (не существует такого аппаратного прерывания). Вы можете лишь мониторить конкретные ячейки памяти (при этом храня дубликаты значений в них где-то ещё в другом месте). Но это вы должны делать сами. Никто вам в этом не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 12:35:22 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
Возможно автор искал простой вариант мониторинга изменений даже не ПЕРЕМЕННОЙ а ячейки памяти под воздействием другого процесса. Именно :) Но это вы должны делать сами. Никто вам в этом не поможет. Ну да, да уже понял ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 13:22:09 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
ТравянойВозможно автор искал простой вариант мониторинга изменений даже не ПЕРЕМЕННОЙ а ячейки памяти под воздействием другого процесса. Именно :) Я таких технологий не знаю. По крайней мере у Intel-овских архитектур. Но с другой стороны, всё меняется. Сравнительно недавно появился XD-Bit (Execute Disable Bit), который позволяет явно запрещать исполнение программного кода в адресных сегментах, которые для этого не предназначены. Возможно, новые процессоры добавят возможностей мониторинга доступа к памяти. Хотя это будет дорогая услуга ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 15:50:10 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
maytonВозможно, новые процессоры добавят возможностей мониторинга доступа к памяти. Хотя это будет дорогая услуга ИМХО начиная с i386 же есть отладочные регистры процессора (аппаратные точки останова) которые позволяют ставить точки останова на доступ к области памяти... только их всего четыре может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 16:48:06 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
Ёшначиная с i386 же есть отладочные регистры процессора (аппаратные точки останова) которые позволяют ставить точки останова на доступ к области памяти... только их всего четыре может быть. Расскажите поподробнее. Автору пригодится. Заодно и я узнаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 16:56:57 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
maytonЁшначиная с i386 же есть отладочные регистры процессора (аппаратные точки останова) которые позволяют ставить точки останова на доступ к области памяти... только их всего четыре может быть. Расскажите поподробнее. Автору пригодится. Заодно и я узнаю.:) === cut === Для управления отладкой используется шесть регистров. Доступ к ним осуществляется при помощи команды MOV. Обращение возможно только из нулевого кольца привилегий. Всего имеется восемь регистров, их назначение: • DR0..DR3 Каждый из этих регистров содержит линейный адрес одной из четырех контрольных точек. Если подкачка страниц разрешена, то их значения транслируются в физические адреса по общему алгоритму; • DR4..DR5 Регистра зарезервированы и в процессоре i486 не используются; • DR6 Отладочный регистр состояния. Он сообщает об условиях, выявленых во время генерирования отладочного исключения (номер 1). Биты регистра устанавливаются аппаратно, а сбрасываются программно; • DR7 Регистр задает вид доступа к памяти, связанный с каждой контрольной точкой. === cut === вот в DR7 можно выставить следующие биты: === cut === LENi - Размер кадра в точке останова, описанной регистром DRi. Указывает размер области, внутри которой условия останова могут сработать. Возможные значения: 00 - 1 байт (все биты соответствующего регистра DRi должны совпасть). Используется при указании адреса команды; 01 - 2 байта (младший бит адреса не используется); 10 - Запрещенное значение; 11 - 4 байта (не используются два младших бита). R/Wi - Поле, определяющее тип доступа к памяти. Указывает контекст использования адреса в соответствующем регистре DRi. Возможные значения: 00 - При выборке кода операции. Внимание значение поля LENi=0; 01 - Запись данных по указанному адресу; 10 - Запрещенное значение; 11 - Запись или чтение данных. === cut === в gdb есть их поддержка: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Автору топика вряд ли это подойдёт :) ему возможно пригодится трюк с int mprotect(const void *addr, size_t len, int prot); запретить запись в область памяти занимаемую строкой, тогда при попытке изменения строки будет сгенерирован сигнал SIGSEGV и в его обработчике можно будет что-нибудь сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 18:20:04 |
|
||
|
Программирование на триггерах
|
|||
|---|---|---|---|
|
#18+
Ёш , нее на такое колдовство не способен, но спасибо, буду знать, что что-то такое есть, а пока буду все же делать через property ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 19:48:55 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36410390&tid=1343954]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
405ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 709ms |

| 0 / 0 |
